JDBC的API介紹


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();
    }
}
View Code

 

  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關閉:

    1. 調用ResultSet對象進行顯示的關閉
    2. Collection對象被關閉
    3. 隱士關閉: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驅動是否支持保存點。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM