JDBC的API介紹
1.JDBC的簡單使用
a.注冊數據庫驅動
b.獲取數據庫連接
獲取連接的方式:1.通過DriverManger
2.通過 DataSource
* Mybatis框架提供了DataSourceFactory使用工廠模式用來創建數據源
* JDBC API提供了DataSource兩個比較重要的擴展
1.ConnectionPoolDataSource 支持緩存和復用Connection對象,能夠很大程度上提升性能和伸縮性
2.該實例返回的Connection對象能夠支持分布式事務
c.執行sql語句
獲取到Connection對象后,可以創建 1.statement接口 2.preparedStatement 3.CallableStatement
Statement接口中定義了執行SQL語句的方法。這些方法不支持參數輸入。PrepareStatement接口增加了設置SQL參數的方法。CallableStatement方法繼承自PreparedStatement。再次基礎上增加了調用存儲過程以及檢索存儲過程調用結果的方法
操作數據庫的案例:

@Test public void testJdbc() { // 初始化數據 DbUtils.initData(); try { // 創建DataSource實例 DataSource dataSource = new UnpooledDataSource("org.hsqldb.jdbcDriver", "jdbc:hsqldb:mem:mybatis", "sa", ""); // 獲取Connection對象 Connection connection = dataSource.getConnection(); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("select * from user"); // 遍歷ResultSet ResultSetMetaData metaData = resultSet.getMetaData(); int columCount = metaData.getColumnCount(); while (resultSet.next()) { for (int i = 1; i <= columCount; i++) { String columName = metaData.getColumnName(i); String columVal = resultSet.getString(columName); System.out.println(columName + ":" + columVal); } System.out.println("---------------------------------------"); } // 關閉連接 IOUtils.closeQuietly(statement); IOUtils.closeQuietly(connection); } catch (Exception e) { e.printStackTrace(); } }
d.處理Sql執行結果
e.釋放連接
2.JDBC中的API
1.JavaSQL包中API : 1.數據類型接口14種 、2.枚舉類型、3.驅動類型、4.異常類
重要的api:Connection、Statement、CallableStatement、PreparedStatement、DatabaseMetaData、ParameterMetaData、ResultSet、ResultSetMetaData、Wrapper
Connection、Statement、ResultSet等接口都繼承自Wrapper接口。這些接口都提供了對JDBC驅動類型的原始訪問能力
Wrapper提供了如下兩個方法:
-
-
- <T> T unwrap(java.lang.Class<T> iface) throws java.sql.SQLException; 用於返回未經過包裝的JDBC驅動的原始類型實例
- boolean isWrapperFor(java.lang.Class<?> iface) throws java.sql.SQLException; 用於判斷當前實例是否是JDBC驅動的某一個類型的包裝類
-
2.Connection:
a.DriverManger:類通過Driver接口為JDBC客戶端管理一組可用驅動程序實現,當客戶端通過DriverManager類和數據庫建立連接時,DriverManager類會根據getConnection的url找到對應的驅動實現類
主要用於獲取數據庫連接和注冊數據庫驅動。常用方法:
registerDriver(java.sql.Driver driver) getConnection(String url) getConnection(String url,String user, String password) getConnection(String url,java.util.Properties info)
b.DataSource接口:DataSource獲取Connection的一種方式,必須包含一個無參數的構造方法
UnpooledDataSource PooledDataSource
c.DriverAction接口:用於監聽驅動類被解決注冊的時間,是驅動提供者需要注意的范疇
d.connection關閉:close() isClose();
3.Statement
Statement接口中定義了執行SQL語句的方法。這些方法不支持參數輸入。PrepareStatement接口增加了設置SQL參數的方法。CallableStatement方法繼承自PreparedStatement。再次基礎上增加了調用存儲過程以及檢索存儲過程調用結果的方法
4.ResultSet :執行的結果集,resultSet沒有關閉時,對它的影響,會直接影響數據庫
resultset游標:ResultSet對象中維護了一個游標,游標指向當前數據行。當ResultSet對象第一次創建時, 游標指向數據的第一行。ResultSet接口中提供了一系列的方法,用於操作ResultSet對象中的游標
a.游標可操作方式:1.默認類型 TYPE_FORWARD_ONLY:ResultSet不可滾動,游標只可向前移動。從第一行到最后一行。不允許向后移動,即只能使用resultSet接口的next()方法。
2.TYPE_SCOROLL_INSENSITIVE :游標可移動,可向前或者向后移動
b.ResultSet並行性 :
-
- CONCUR_READ_ONLY:表示只能從resultset對象中讀取數據
- CONCUR_UPDATABLE:表示既能從resultset中讀取數據,又能更新數據
c.ResultSet可保持性
-
- HOLD+CURSORS_OVER_COMMIT:當調用Connection對象的commit方法時,不關閉當前事務調用的resultset對象
- CLOSE_CURSORS_AT_COMMIT:當前事務創建的ResultSet對象,在事務提交后,會被關閉。對一些應用來說,能夠提高系統系統
d.ResultSet關閉:
-
- 調用ResultSet對象進行顯示的關閉
- Collection對象被關閉
- 隱士關閉:1.相同的statement對象執行 2.可保持性設置為CLOSE_CURSORS_AT_COMMIT的
5.DataBaseMetaData:用於提供底層數據源相關信息。該接口主要用於應用程序或者工具如何與底層數據源進行交互。該接口是由JDBC提供程序實現的
對象創建:connection.getMetaData()
接口作用:
1.獲取數據源信息
2.確定數據源是否支持某一個特性或者功能
3.獲取數據源的限制
4.確定數據源包含哪些SQL對象以及這些對象的屬性
5.獲取數據源對事物的支持
3.JDBC的事務
何時開啟一個事務是由JDBC提供程序決定的。或者數據庫隱士決定的事務提交可通過connection.setAutoCommit設置是否手動提交
隔離級別:事務隔離級別用於指定事務中對數據的操作對其他事務的可見性。不同的事務隔離級別能夠解決不同的事務並發問題,與效率有關。Connection對象的默認事務隔離級別是由數據庫驅動實現的。事務隔離級別可能造成的問題:臟讀、不可重復讀、幻讀。
事務的保存點:保存點通過在事務中標記1個中間的點來對事務進行更細粒度的控制,一旦設置保存點,事務就可以回滾到保存點,而不影響保存點之前的操作。DatabaseMetaData接口 提供了supportsSavepoints()方法,用於判斷JDBC驅動是否支持保存點。