日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JDBC基础知识复习

發布時間:2025/3/15 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDBC基础知识复习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JDBC基礎知識復習

  • 1、JDBC連接數據庫
    • 1.1、導入JDBC驅動
    • 1.2、注冊JDBC驅動程序
    • 1.3、創建連接對象
    • 1.4、關閉JDBC連接
    • 1.5、每種數據庫對應的驅動名和URL
  • 2、JDBC接口
    • 2.2、Statement
    • 2.3、PreparedStatement
    • 2.4、兩者區別
  • 3、ResultSet集合
    • 3.1、導航
    • 3.2、獲取
    • 3.3、更新
  • 4、事務
    • 4.1、事務提交
    • 4.2、事務回滾
  • 5、實現自己的數據庫連接池
  • 5.1、自己實現的連接池
  • 5.2、測試
    • 5.3、測試結果

1、JDBC連接數據庫

分3步:導入、注冊、創建連接對象

1.1、導入JDBC驅動

導入對應數據庫的驅動包(Jar文件),或者使用mvn導入對應數據庫的依賴。

1.2、注冊JDBC驅動程序

2個方法注冊驅動,以Mysql為例子

  • Class.forName("com.mysql.jdbc.Driver"),拋一個ClassNotFoundException的異常
  • DriverManager.registerDriver(new com.mysql.jdbc.Driver())
  • 1.3、創建連接對象

    一般使用DriverManager.getConnection(String url, String user, String pass)方法獲取

    還有另外兩種:

  • getConnection(String url)方法
  • getConnection(String url, Properties prop)方法
  • 1.4、關閉JDBC連接

    代碼:Connection對象的close()方法

    1.5、每種數據庫對應的驅動名和URL

    如下表:

    JDBC驅動程序的名稱URL
    Mysqlcom.mysql.jdbc.Driverjdbc:mysql://hostname:port/ databaseName
    Oracleoracle.jdbc.driver.OracleDriverjdbc:oracle:thin:@hostname:port Number:databaseName

    2、JDBC接口

    通過使用 JDBC Statement, CallableStatement 和 PreparedStatement 接口定義的方法和屬性,使可以使用 SQL 或 PL/SQL 命令和從數據庫接收數據。

    接口應用場景
    Statement當在運行時使用靜態 SQL 語句時(Statement接口不能接收參數)
    PreparedStatement當計劃多次使用 SQL 語句時(PreparedStatement 接口接收在運行時輸入參數)

    2.2、Statement

    我們需要使用 Connection 對象的 createStatement() 方法進行創建

    Statement的方法:

    方法說明
    boolean execute(String SQL)如果 ResultSet 對象可以被檢索返回布爾值 true,否則返回 false。使用這個方法來執行 SQL DDL 語句,或當需要使用真正的動態 SQL
    int executeUpdate(String SQL)用于執行 INSERT、UPDATE 或 DELETE 語句以及 SQL DDL(數據定義語言)語句。返回值是一個整數,指示受影響的行數(即更新計數)
    ResultSet executeQuery(String SQL)返回 ResultSet 對象。用于產生單個結果集的語句,例如 SELECT 語句

    釋放Statement對象的方法是close()

    2.3、PreparedStatement

    占位符的概念而已,序號從1開始(不是從0開始哦)

    2.4、兩者區別

    Statement適合靜態SQL,PreparedStatement適合動態SQL。

    因為PreparedStatement可以防止SQL注入!

    3、ResultSet集合

    結果集通常是通過執行查詢數據庫的語句生成,表示數據庫查詢結果的數據表。ResultSet 對象具有指向其當前數據行的光標。

    ResultSet接口的方法可分為3類:

  • 導航方法:用于移動光標
  • 獲取方法:用于查看當前行的光標所指向的列中的數據
  • 更新方法:用于更新當前行的列中的數據
  • 3.1、導航

    迭代集合

    3.2、獲取

    使用get方法

    3.3、更新

    使用update方法

    4、事務

    與數據庫理論的事務概念一樣,必須具有原子性、一致性、隔離性、持久性

    需要先關閉提交的代碼:使用Connection的setAutoCommit(false)方法

    4.1、事務提交

    使用Connection對象的commit()方法

    4.2、事務回滾

    使用Conncetion對象的rollback()方法

    5、實現自己的數據庫連接池

    使用之前項目的圖像算法中的均值hash的數據表

    5.1、自己實現的連接池

    package util;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.LinkedList;/*** 數據庫連接池* 循環鏈表實現* @author zzw*/ public class DBPool {/*** 池大小*/private static final int size = 20;/*** 數據庫驅動名*/private static final String driverName = "com.mysql.jdbc.Driver";/*** 數據庫名*/private static final String url = "jdbc:mysql://localhost:3306/imghashdb";/*** 數據庫用戶名*/private static final String user = "root";/*** 數據庫密碼*/private static final String password = "3306";/*** 連接池*/private static final LinkedList<Connection> pool = new LinkedList<>();// 工具類不配實例化private DBPool() {}/*** 創建size個連接對象放入連接池*/private static void createConnection() {for(int i=0;i<size;i++) {try {pool.add(DriverManager.getConnection(url, user, password));} catch (SQLException e) {e.printStackTrace();}}}// 靜態代碼塊用于加載數據庫驅動static {try {Class.forName(driverName);} catch (ClassNotFoundException e) {e.printStackTrace();}}/*** 獲取一個數據庫連接* @return Connection*/public static synchronized Connection getConn() {if(pool.isEmpty()) {createConnection();}return pool.removeFirst();}/*** 歸還一個數據庫連接* @param conn 數據庫連接*/public static synchronized void callback(Connection conn) {// 如果當前連接池大小超過規定連接池大小,則不再歸還if(pool.size() > size) {try {conn.close();System.out.println("此連接不必歸還");} catch (SQLException e) {e.printStackTrace();}}else {pool.add(conn);}} }

    5.2、測試

    測試代碼如下:

    package app;import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;import util.DBPool;public class App {public static void main(String[] args) throws SQLException {// 1. 增Connection conn = DBPool.getConn();conn.setAutoCommit(false);PreparedStatement prepareStatement = conn.prepareStatement("insert ahash values(?, ?, ?)");prepareStatement.setInt(1, 1);prepareStatement.setString(2, "00101101");prepareStatement.setString(3, "hello.jpg");int insert = prepareStatement.executeUpdate();System.out.println(insert);conn.commit();DBPool.callback(conn);// 2. 改//# 類似..略// 3. 查conn = DBPool.getConn();prepareStatement = conn.prepareStatement("select * from ahash");ResultSet resultSet = prepareStatement.executeQuery();resultSet.first();while(resultSet.next()) {System.out.println("id: "+resultSet.getInt(1)+", hash: "+resultSet.getString(2).substring(0, 8)+"..., path: "+resultSet.getString(3));}DBPool.callback(conn);// 4. 刪//# 類似..略} }

    5.3、測試結果


    控制臺輸出:

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的JDBC基础知识复习的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。