日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

jdbc详解:1、创建数据库connection连接

發布時間:2024/4/13 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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连接的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。