jdbc详解:1、创建数据库connection连接
為什么80%的碼農都做不了架構師?>>> ??
新手上路,請多多包涵,文章的不足歡迎吐槽。本文章以mysql為例
相信很多人都會使用jdbc創建數據連接。
static String driverName = "com.mysql.jdbc.Driver";static String url = "jdbc:mysql://127.0.0.1:3306/mysql";static String username = "root";static String password = "";@Testpublic void getConnection1() {try {// 1、加載驅動Class.forName(driverName);// 2、獲取connectionConnection conn = DriverManager.getConnection(url,username,password);System.out.println(conn);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}}代碼可以說是非常簡單,但是仔細想一下,發現會有2兩疑問:
Class.forName(driverName)這樣加載去驅動,又沒有創建進行賦值給某個變量,DriverManager是如何使用該驅動來創建連接的?
如果換成別的數據庫,只需要把Mysql的驅動換成別的數據庫驅動就可以了,其它的代碼不用改,這是怎么做到的?
下面進行解答?
疑問1:
Class.forName(className)這個方法是會執行className這個類的靜態代碼塊的。在我們執行Class.forName("com.mysql.jdbc.Driver")的時候,com.mysql.jdbc.Driver這個類的靜態代碼塊會被執行,然后向DriverManager注冊驅動
下面是com.mysql.jdbc.Driver的源碼
public class Driver extends NonRegisteringDriver implements java.sql.Driver {//// Register ourselves with the DriverManager//static {try {java.sql.DriverManager.registerDriver(new Driver());} catch (SQLException E) {throw new RuntimeException("Can't register driver!");}}其它省略 }疑問2:
這個很簡單,定義驅動的接口就可以了,然后交由DriverManager驅動管理器進行管理。jdbc只是定義了java數據庫連接的標準,具體的實現是各個數據庫廠商實現的。
java.sql.Driver源碼
public interface Driver {// 要把 username、password等信息put到Properties里面Connection connect(String url, java.util.Properties info)throws SQLException;boolean acceptsURL(String url) throws SQLException;DriverPropertyInfo[] getPropertyInfo(String url, java.util.Properties info)throws SQLException;int getMajorVersion();int getMinorVersion();boolean jdbcCompliant();//------------------------- JDBC 4.1 -----------------------------------public Logger getParentLogger() throws SQLFeatureNotSupportedException; }在調用DriverManager.getConnection()的時候,DriverManager其實是使用廠商提供的驅動包內java.sql.Driver的實現類來獲取connection的,如果mysql就是使用com.mysql.jdbc.Driver內connect()方法進行連接數據庫獲取connection。
如果我們不是用DriverManager,那應該怎樣獲取connection呢??
很簡單直接調用java.sql.Driver實現類的connect()方法就可以了。
@Testpublic void getConnnection2() {try {// 通過反射創建驅動對象Driver driver = (Driver) Class.forName(driverName).newInstance();// 你也可以這樣寫,但是這樣耦合太大了 // com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();// 包裝連接信息Properties info = new Properties();info.put("user", username);info.put("password", password);// 獲取連接Connection conn = driver.connect(url, info);System.out.println(conn);} catch (Exception e) {e.printStackTrace();}}轉載于:https://my.oschina.net/hgp/blog/1358511
總結
以上是生活随笔為你收集整理的jdbc详解:1、创建数据库connection连接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP命名空间学习笔记
- 下一篇: linux cmake编译源码,linu