jdbc工作原理
阿新 • • 發佈:2019-02-17
jdbc是基於tcp/ip的應用層協議,資料的傳輸都通過socket進行,以mysql為例記錄過程
1、Class.forName(驅動類名),會載入對應的驅動類並將其註冊到java.sql.DriverManager中(註冊的操作一般在驅動類(Driver介面的實現類)的靜態程式碼段中)
2、DriverManager.getConnection會呼叫驅動類的connect方法返回一個java.sql.Connection物件。mysql的MySQLConnection繼承java.sql.Connection。
3、Connection(com.mysql.jdbc.ConnectionImpl實現MySQLConnection)物件呼叫execSQL執行sql,sql的執行由MysqlIO物件完成。
4、MysqlIO中維護了一個Socket物件,與mysql伺服器通訊的工作主要由該類完成,MysqlIO的sqlQueryDirect方法會構造資料包並將其傳送到伺服器。
ps1:介面繼承繼承介面使用extends關鍵字。
ps2:jdbc連線字串中的編碼由characterEncoding指定,預設是utf-8。如果不是utf-8並且與mysql server設定的編碼不一致,在com.mysql.jdbc.ConnectionImpl的configureClientCharacterSet方法中會向伺服器傳送SET NAMES charsetname命令修改伺服器端編碼,包括character_set_client、character_set_connection、character_set_results。這樣伺服器端就可以用正確的方式解碼傳過去的sql語句。
1、Class.forName(驅動類名),會載入對應的驅動類並將其註冊到java.sql.DriverManager中(註冊的操作一般在驅動類(Driver介面的實現類)的靜態程式碼段中)
2、DriverManager.getConnection會呼叫驅動類的connect方法返回一個java.sql.Connection物件。mysql的MySQLConnection繼承java.sql.Connection。
3、Connection(com.mysql.jdbc.ConnectionImpl實現MySQLConnection)物件呼叫execSQL執行sql,sql的執行由MysqlIO物件完成。
4、MysqlIO中維護了一個Socket物件,與mysql伺服器通訊的工作主要由該類完成,MysqlIO的sqlQueryDirect方法會構造資料包並將其傳送到伺服器。
ps1:介面繼承繼承介面使用extends關鍵字。
ps2:jdbc連線字串中的編碼由characterEncoding指定,預設是utf-8。如果不是utf-8並且與mysql server設定的編碼不一致,在com.mysql.jdbc.ConnectionImpl的configureClientCharacterSet方法中會向伺服器傳送SET NAMES charsetname命令修改伺服器端編碼,包括character_set_client、character_set_connection、character_set_results。這樣伺服器端就可以用正確的方式解碼傳過去的sql語句。