JDBC——建立連接——基礎

  建立連接的本質就是獲取Connection對象,它的方式有兩種,

  第一種,Driver方式,可以直接通過驅動類,也可以通過驅動管理器類。實際中不使用,只學習的時候,或編寫測試案例時使用。

  第二種,DataSource,數據源,它是一個接口,第三方提供實現。它支持的功能完全由第三方實現,最常見的有連接池(通常命名爲XXPooledDataSource),分佈式(通常命名爲XADataSource)。本篇略,後續介紹C3P0和Hirika數據源。

  獲取到Connection對象之後,可以查詢數據庫的元信息,執行SQL語句等。本篇只介紹查詢元信息。

  本篇按照建立連接之前,連接對象本身,建立連接之後的順序,介紹三個階段中涉及到的核心對象。

1、Driver

  驅動接口,全稱爲java.sql.Driver,數據庫廠商提供實現類。方法由三部分組成。建立連接,查詢信息,兼容性檢查。

1.1   建立連接

  建立連接的步驟如下:

  第一步,創建Driver對象。

  Driver driver = new com.mysql.cj.jdbc.Driver();

  第二步,調用connect方法。

  Connection connection = driver.connect(url, properties);

  url:數據庫的url地址,例如mysql地址:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8

  properties:連接時需要的屬性,用戶名和密碼是必須的,用戶名的屬性名稱爲user,密碼的屬性名稱爲password。

// 創建Driver對象, 實例化爲mysql Driver
Driver driver = new com.mysql.cj.jdbc.Driver();
// 建立連接需要的url地址
String url = 
"jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8";
// 設置連接的屬性
Properties properties = new Properties();
properties.put("user", "xx");
properties.put("password","xx");
// 獲取Connection對象
Connection connection = driver.connect(url, properties);

1.2   查詢信息

  查詢版本信息,其他信息都封裝在DriverPropertyInfo中,查看它需要建立連接。

// 創建Driver對象, 實例化爲mysql Driver
Driver driver = new com.mysql.cj.jdbc.Driver();
// 驅動主版本號, 返回8
log.info("驅動的主版本號:{}", driver.getMajorVersion());
// 驅動的次版本號, 返回3, 說明版本號爲8.3
log.info("驅動的次版本號:{}", driver.getMinorVersion());
// 建立連接需要的url地址
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8";
// 設置連接的屬性,用戶名,密碼
Properties properties = new Properties();
properties.put("user", "xx");
properties.put("password","xx");
// 其他信息,封裝對象DriverPropertyInfo。
log.info("驅動的其他屬性:{}", JSON.toJSONString(driver.getPropertyInfo(url, properties)));

1.3  兼容性

// 驅動是否支持url,返回布爾值
log.info("驅動是否匹配此url地址:{}", driver.acceptsURL(url));
// 是否完全支持jdbc規範。
log.info("驅動是否完全支持jdbc規範:{}", driver.jdbcCompliant());

2、DriverManager

  DriverManager,驅動管理器,方法由三部分組成。管理驅動,建立連接,get & set屬性。

2.1   管理驅動

  註冊驅動,查詢驅動,撤銷驅動。

  註冊驅動有兩種方式。

  顯示,調用DriverManager.registerDriver方法。

  隱式,在驅動類加載時,設置jdbc.drivers虛擬機變量時,會自動註冊。

  查詢驅動:

  getDriver(url):根據url地址查詢驅動。

  getDrivers():所有驅動列表。

  撤銷驅動:調用deregisterDriver(driver)方法。

// 註冊驅動
DriverManager.registerDriver(driverInstance);
// 第二種方式, 設置jdbc:drivers
System.setProperty("jdbc:drivers","com.mysql.cj.jdbc.Driver");
// 查詢驅動信息
log.info("DriverManager根據url查詢驅動:{}", 
JSONArray.toJSONString(DriverManager.getDriver(url)));
log.info("DriverManager查詢所有驅動:{}", 
JSONArray.toJSONString(DriverManager.getDrivers()));
// 撤銷驅動
DriverManager.deregisterDriver(driverInstance);

2.2  建立連接

  建立連接,遍歷已註冊的驅動,逐個適配url地址。有三個方法。

  getConnection,

  getConnection(url, prop),

  getConnection(url, user, password)

2.3  get & set

  超時時間:loginTimeout, 單位爲秒,當設置爲0時,沒有時間限制。

  LogWriter:日誌的輸出流。

3、Connection

  Connection, 連接對象,獲取該對象是後續任何操作的前提條件。它的方法由四部分組成。

  執行sql:創建三種Statement對象。

  查詢信息:獲取DatabaseMeta,查詢元信息。獲取ClientInfo,客戶端信息。

  數據庫功能:是否自動提交,事務隔離級別,等等。

  類型映射:JDBC與Java對象相互轉換時的映射關係,略。

3.1  執行sql

  創建Statement對象,createStatement以及它的重寫。

  創建PreparedStatement對象,prepareStatement以及它的重寫。

  創建CallableStatement對象,prepareCall以及它的重寫。

3.2  查詢信息

  元信息:

    getDatabaseMetaData,所有元信息

    catalog:get & set方法。catalog,數據庫名稱。

    schema:get & set方法。schema名稱

  客戶端信息: getClientInfo。

3.3  功能

  事務相關:

    隔離級別:get & setTransactionIsolation,返回值爲int。

    是否只讀:布爾屬性readOnly的基礎方法。

    存檔點:set & release & rollback。

    回滾:rollback。

    提交:布爾屬性autoCommit的基礎方法。commit方法。

  其他:

    是否關閉: isClosed,close關閉。

3.4  類型映射

  TypeMap:get & set方法。第一個參數string爲數據庫類型,class爲Java對象類型。

4、DatabaseMetadata

  元信息,主要有三類。

  版本信息:數據庫版本,JDBC版本,驅動版本。

  實例信息:catalog, schema, table, column等信息。

  變量:各類數據庫的變量。

4.1  版本信息

// 數據庫版本
log.info("數據庫的廠商:{}", metaData.getDatabaseProductName());
log.info("數據庫的版本號:{}.{}", metaData.getDatabaseMajorVersion(), metaData.getDatabaseMinorVersion());
// 驅動版本號
log.info("Driver的名稱:{}", metaData.getDriverName());
log.info("Driver的版本:{}", metaData.getDriverVersion());
log.info("Driver的版本:{}.{}", metaData.getDriverMajorVersion(), metaData.getDriverMinorVersion());
// JDBC版本號
log.info("JDBC的版本號:{}.{}", metaData.getJDBCMajorVersion(), metaData.getJDBCMinorVersion());

4.2  實例信息

  catalog-->schema--->table--->column(列定義信息等),只列舉了schema。

ResultSet schema = metaData.getCatalogs();
while (schema.next()){
	// 數據庫信息
	log.info("數據庫的schema:{}", schema.getString(1));
}

4.3  變量

  連接信息

log.info("url:{}", metaData.getURL());
log.info("userName:{}", metaData.getUserName());

  數據庫支持的函數。

log.info("所有的系統函數:{}", metaData.getSystemFunctions());
log.info("所有的數字函數:{}", metaData.getNumericFunctions());
log.info("所有的字符串函數:{}", metaData.getStringFunctions());
log.info("所有的日期函數:{}", metaData.getTimeDateFunctions());
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章