Java DriverManager.getConnection()獲取數(shù)據(jù)庫連接
DriverManager.getConnection一共有四個重載方法,前三個由public修飾,用來獲取不同類型的參數(shù),這三個getConnection實(shí)際相當(dāng)于一個入口,他們最終都會return第四個私有化的getConnection方法,最終向第四個私有化方法的傳入?yún)?shù)都是url,java.util.Properties,以及Reflection.getCallerClass(),這個方法是native的
其中Reflection.getCallerClass()是反射中的一個方法,這個方法用來返回他的調(diào)用類,也就說是哪個類調(diào)用了這個方法,Reflection類位于調(diào)用棧中的0幀位置,在JDK7以前,該方法可以傳入int n返回調(diào)用棧中從0幀開始的第n幀中的類,在JDK7中,需要設(shè)置java命令行選項(xiàng)Djdk.reflect.allowGetCallerClass來使用該方法,到了JDK8時,再調(diào)用該方法會導(dǎo)致UnsupportedOperationException異常。
JDK8中g(shù)etCallerClass使用方法變更為getCallerClass(),Reflection.getCallerClass()方法調(diào)用所在的方法必須用@CallerSensitive進(jìn)行注解,通過此方法獲取class時會跳過鏈路上所有的有@CallerSensitive注解的方法的類,直到遇到第一個未使用該注解的類,避免了用Reflection.getCallerClass(int n) 這個過時方法來自己做判斷。
在這里每個getConnection都是用CallerSensitive修飾的,調(diào)用getCallerClass應(yīng)該是獲取外面使用DriverManager.getConnection()的類的名稱,即在class A中調(diào)用了DriverManager.getConnection(),則返回class A。
Java DriverManager.getConnection() 方法用于獲得試圖建立到指定數(shù)據(jù)庫 URL 的連接。DriverManager 試圖從已注冊的 JDBC 驅(qū)動程序集中選擇一個適當(dāng)?shù)尿?qū)動程序。
語法1
getConnection(String url)
參數(shù)說明:
- url:訪問數(shù)據(jù)庫的 URL 路徑。
示例
下面的代碼利用 getConnection 方法創(chuàng)建與 MySQL 數(shù)據(jù)庫的連接,并返回連接對象。
public Connection getConnection(){
Connection con=null;
try{
Class.forName("com.mysql.jdbc.Driver"); //注冊數(shù)據(jù)庫驅(qū)動
String url = "jdbc:mysql://localhost:3306/test?user=root&password=root"; //定義連接數(shù)據(jù)庫的url
con = DriverManager.getConnection(url); //獲取數(shù)據(jù)庫連接
System.out.println("數(shù)據(jù)庫連接成功!");
}catch(Exception e){
e.printStackTrace();
}
return con; //返回一個連接
}
語法2
getConnection(String url,Properties info)
參數(shù)說明:
- url:訪問數(shù)據(jù)庫的 URL 路徑。
- info:是一個持久的屬性集對象,包括 user 和 password 屬性。
示例
下面的代碼利用 getConnection 方法第一種語法格式,創(chuàng)建與 MySQL 數(shù)據(jù)庫的連接,并返回連接對象。
public Connection getConnection(){
Connection con = null; //定義數(shù)據(jù)庫連接對象
Properties info = new Properties(); //定義Properties對象
info.setProperty("user","root"); //設(shè)置Properties對象屬性
info.setProperty("password","root");
try{
Class.forName("com.mysql.jdbc.Driver"); //注冊數(shù)據(jù)庫驅(qū)動
String url = "jdbc:mysql://localhost:3306/test"; //test為數(shù)據(jù)庫名稱
con = DriverManager.getConnection(url,info); //獲取連接數(shù)據(jù)庫的Connection對象
System.out.println("數(shù)據(jù)庫連接成功!");
}catch(Exception e){
e.printStackTrace();
}
return con;//返回一個連接
}
語法3
Connection(String url,String user,String password)
參數(shù)說明:
- url:訪問數(shù)據(jù)庫的 URL 路徑。
- user:是訪問數(shù)據(jù)庫的用戶名。
- password:連接數(shù)據(jù)庫的密碼。
典型應(yīng)用
下面的代碼利用 getConnection 方法創(chuàng)建與 SQL Server 數(shù)據(jù)庫的連接,并返回連接對象。與數(shù)據(jù)庫建立連接成功后的運(yùn)行結(jié)果。代碼如下:
private Connection con;
private String user = "sa"; //定義連接數(shù)據(jù)庫的用戶名
private String password = ""; //定義連接數(shù)據(jù)庫的密碼
private String className = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private String url = "jdbc:sqlserver://localhost:1433;DatabaseName=db_database01"; /**創(chuàng)建數(shù)據(jù)庫連接*/
public Connection getCon(){
try{
Class.forName(className);//加載數(shù)據(jù)庫驅(qū)動
System.out.println("數(shù)據(jù)庫驅(qū)動加載成功!");
con = DriverManager.getConnection(url,user,password); //連接數(shù)據(jù)庫
System.out.println("成功地獲取數(shù)據(jù)庫連接!");
}catch(Exception e){
System.out.println("創(chuàng)建數(shù)據(jù)庫連接失??!");
con = null;
e.printStackTrace();
}
return con;
}
運(yùn)行結(jié)果如下:
數(shù)據(jù)庫驅(qū)動加載成功!
成功地獲取數(shù)據(jù)庫連接!
到此這篇關(guān)于Java DriverManager.getConnection()獲取數(shù)據(jù)庫連接的文章就介紹到這了,更多相關(guān)Java DriverManager.getConnection() 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何把idea中的項(xiàng)目導(dǎo)入github倉庫中(圖文詳解)
這篇文章主要介紹了如何把idea中的項(xiàng)目導(dǎo)入github倉庫中,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
解決Eclipse中java文件的圖標(biāo)變成空心J的問題
這篇文章主要介紹了解決Eclipse中java文件的圖標(biāo)變成空心J的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
簡單講解奇偶排序算法及在Java數(shù)組中的實(shí)現(xiàn)
這篇文章主要介紹了奇偶排序算法及Java數(shù)組的實(shí)現(xiàn),奇偶排序的時間復(fù)雜度為O(N^2),需要的朋友可以參考下2016-04-04
基于Rest的API解決方案(jersey與swagger集成)
下面小編就為大家?guī)硪黄赗est的API解決方案(jersey與swagger集成)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08
合并有序數(shù)組的實(shí)現(xiàn)(java與C語言)
這篇文章主要介紹了合并有序數(shù)組的實(shí)現(xiàn)(java與C語言)的相關(guān)資料,這里對有序數(shù)組的合并分享了java版本和C語言版本的示例,需要的朋友可以參考下2017-08-08
Spring Boot如何優(yōu)化內(nèi)嵌的Tomcat示例詳解
spring boot默認(rèn)web程序啟用tomcat內(nèi)嵌容器,監(jiān)聽8080端口,下面這篇文章主要給大家介紹了關(guān)于Spring Boot如何優(yōu)化內(nèi)嵌Tomcat的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-09-09

