JDBC 規範回顧
- 2019 年 12 月 10 日
- 筆記
JDBC 是一種用於執行SQL語句的Java API,可以為多種關係資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。java 提供了jdbc的介面規範,對應資料庫廠商依照規範進行驅動類庫開發,提供給開發者。應用程式與數據以jdbc橋接的方式進行交互,任何基於JDBC 的 ORM 框架都是對JDBC 操作的封裝

常用介面
- java.sql.Driver 該介面是提供給資料庫開發廠商的,主要功能是描述驅動程式,提供驅動資訊,最重要的是實現資料庫連接的抽象 Connection connect(String url, java.util.Properties info) throws SQLException,如果某個資料庫要實現jdbc規範必須實現該介面。開發者裝載該介面通過 Class.forName(String driverName)進行,其中 driverName 為全類名。
- java.sql.Connection 該介面是資料庫jdbc 連接的抽象層,主要生成SQL並向資料庫發送 編譯語句 java.sql.Statement 預編譯語句java.sql.PreparedStatement 資料庫存儲過程 java.sql.CallableStatement 同時事務級別 事務的commit,事務的callback,連接的生命周期 也由 Connection 來操作。
- 事務的隔離級別 int TRANSACTION_NONE = 0 無事務 int TRANSACTION_READ_UNCOMMITTED = 1 讀取未提交 int TRANSACTION_READ_COMMITTED = 2 讀取已提交 int TRANSACTION_REPEATABLE_READ = 4 可重複讀取 int TRANSACTION_SERIALIZABLE = 8 可序列化
- java.sql.Statement 用於執行靜態SQL語句並返回它所生成結果的對象。 類圖:

Statement:由createStatement創建,用於發送簡單的SQL語句(不帶參數) 。statement 沒有 set<Type>之類的方法,所以sql必須作為一個整體傳入。例如

- PreparedStatement :繼承自Statement介面,由preparedStatement創建,用於發送含有一個或多個參數的SQL語句。PreparedStatement對象比Statement對象的效率更高,並且可以防止SQL注入,所以我們一般都使用PreparedStatement,大數據量比較消耗資源。例如

- CallableStatement:繼承自PreparedStatement介面,由方法prepareCall創建,用於調用存儲過程
- statement 常用方法:
- execute(String sql):運行語句,返回是否有結果集
- executeQuery(String sql):運行select語句,返回ResultSet結果集。
- executeUpdate(String sql):運行insert/update/delete操作,返回更新的行數。
- addBatch(String sql) :把多條sql語句放到一個批處理中。
- executeBatch():向資料庫發送一批sql語句執行。
- set<Type>(int colunmIndex,Type val) 系列介面 PreparedStatement 回填參數值
- java.sql.ResultSet
- 主要用來獲取sql執行後返回的結果集
- 獲取欄位數據操作
- getString(int index)、getString(String columnName):獲得在資料庫里是varchar、char等類型的數據對象。
- getFloat(int index)、getFloat(String columnName):獲得在資料庫里是Float類型的數據對象。
- getDate(int index)、getDate(String columnName):獲得在資料庫里是Date類型的數據。
- getBoolean(int index)、getBoolean(String columnName):獲得在資料庫里是Boolean類型的數據。
- getObject(int index)、getObject(String columnName):獲取在資料庫里任意類型的數據。
- 游標操作
- next():移動到下一行
- previous():移動到前一行
- absolute(int row):移動到指定行
- beforeFirst():移動resultSet的最前面。
- afterLast() :移動到resultSet的最後面。
resultSet statement connection 都是需要關閉 遵循從下游到上游的方向依次關閉
以上就是對jdbc一些重要方法的分析,Mybatis、Spring Data JPA、Hibernate ORM、JOOQ都是建立在jdbc基礎之上的。深刻理解jdbc,其他ORM框架才能用的更得心應手。