Java DriverManager.getConnection()獲取數(shù)據(jù)庫(kù)連接
DriverManager.getConnection一共有四個(gè)重載方法,前三個(gè)由public修飾,用來獲取不同類型的參數(shù),這三個(gè)getConnection實(shí)際相當(dāng)于一個(gè)入口,他們最終都會(huì)return第四個(gè)私有化的getConnection方法,最終向第四個(gè)私有化方法的傳入?yún)?shù)都是url,java.util.Properties,以及Reflection.getCallerClass(),這個(gè)方法是native的
其中Reflection.getCallerClass()是反射中的一個(gè)方法,這個(gè)方法用來返回他的調(diào)用類,也就說是哪個(gè)類調(diào)用了這個(gè)方法,Reflection類位于調(diào)用棧中的0幀位置,在JDK7以前,該方法可以傳入int n返回調(diào)用棧中從0幀開始的第n幀中的類,在JDK7中,需要設(shè)置java命令行選項(xiàng)Djdk.reflect.allowGetCallerClass來使用該方法,到了JDK8時(shí),再調(diào)用該方法會(huì)導(dǎo)致UnsupportedOperationException異常。
JDK8中g(shù)etCallerClass使用方法變更為getCallerClass(),Reflection.getCallerClass()方法調(diào)用所在的方法必須用@CallerSensitive進(jìn)行注解,通過此方法獲取class時(shí)會(huì)跳過鏈路上所有的有@CallerSensitive注解的方法的類,直到遇到第一個(gè)未使用該注解的類,避免了用Reflection.getCallerClass(int n) 這個(gè)過時(shí)方法來自己做判斷。
在這里每個(gè)getConnection都是用CallerSensitive修飾的,調(diào)用getCallerClass應(yīng)該是獲取外面使用DriverManager.getConnection()的類的名稱,即在class A中調(diào)用了DriverManager.getConnection(),則返回class A。
Java DriverManager.getConnection() 方法用于獲得試圖建立到指定數(shù)據(jù)庫(kù) URL 的連接。DriverManager 試圖從已注冊(cè)的 JDBC 驅(qū)動(dòng)程序集中選擇一個(gè)適當(dāng)?shù)尿?qū)動(dòng)程序。
語法1
getConnection(String url)
參數(shù)說明:
- url:訪問數(shù)據(jù)庫(kù)的 URL 路徑。
示例
下面的代碼利用 getConnection 方法創(chuàng)建與 MySQL 數(shù)據(jù)庫(kù)的連接,并返回連接對(duì)象。
public Connection getConnection(){ Connection con=null; try{ Class.forName("com.mysql.jdbc.Driver"); //注冊(cè)數(shù)據(jù)庫(kù)驅(qū)動(dòng) String url = "jdbc:mysql://localhost:3306/test?user=root&password=root"; //定義連接數(shù)據(jù)庫(kù)的url con = DriverManager.getConnection(url); //獲取數(shù)據(jù)庫(kù)連接 System.out.println("數(shù)據(jù)庫(kù)連接成功!"); }catch(Exception e){ e.printStackTrace(); } return con; //返回一個(gè)連接 }
語法2
getConnection(String url,Properties info)
參數(shù)說明:
- url:訪問數(shù)據(jù)庫(kù)的 URL 路徑。
- info:是一個(gè)持久的屬性集對(duì)象,包括 user 和 password 屬性。
示例
下面的代碼利用 getConnection 方法第一種語法格式,創(chuàng)建與 MySQL 數(shù)據(jù)庫(kù)的連接,并返回連接對(duì)象。
public Connection getConnection(){ Connection con = null; //定義數(shù)據(jù)庫(kù)連接對(duì)象 Properties info = new Properties(); //定義Properties對(duì)象 info.setProperty("user","root"); //設(shè)置Properties對(duì)象屬性 info.setProperty("password","root"); try{ Class.forName("com.mysql.jdbc.Driver"); //注冊(cè)數(shù)據(jù)庫(kù)驅(qū)動(dòng) String url = "jdbc:mysql://localhost:3306/test"; //test為數(shù)據(jù)庫(kù)名稱 con = DriverManager.getConnection(url,info); //獲取連接數(shù)據(jù)庫(kù)的Connection對(duì)象 System.out.println("數(shù)據(jù)庫(kù)連接成功!"); }catch(Exception e){ e.printStackTrace(); } return con;//返回一個(gè)連接 }
語法3
Connection(String url,String user,String password)
參數(shù)說明:
- url:訪問數(shù)據(jù)庫(kù)的 URL 路徑。
- user:是訪問數(shù)據(jù)庫(kù)的用戶名。
- password:連接數(shù)據(jù)庫(kù)的密碼。
典型應(yīng)用
下面的代碼利用 getConnection 方法創(chuàng)建與 SQL Server 數(shù)據(jù)庫(kù)的連接,并返回連接對(duì)象。與數(shù)據(jù)庫(kù)建立連接成功后的運(yùn)行結(jié)果。代碼如下:
private Connection con; private String user = "sa"; //定義連接數(shù)據(jù)庫(kù)的用戶名 private String password = ""; //定義連接數(shù)據(jù)庫(kù)的密碼 private String className = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; private String url = "jdbc:sqlserver://localhost:1433;DatabaseName=db_database01"; /**創(chuàng)建數(shù)據(jù)庫(kù)連接*/ public Connection getCon(){ try{ Class.forName(className);//加載數(shù)據(jù)庫(kù)驅(qū)動(dòng) System.out.println("數(shù)據(jù)庫(kù)驅(qū)動(dòng)加載成功!"); con = DriverManager.getConnection(url,user,password); //連接數(shù)據(jù)庫(kù) System.out.println("成功地獲取數(shù)據(jù)庫(kù)連接!"); }catch(Exception e){ System.out.println("創(chuàng)建數(shù)據(jù)庫(kù)連接失??!"); con = null; e.printStackTrace(); } return con; }
運(yùn)行結(jié)果如下:
數(shù)據(jù)庫(kù)驅(qū)動(dòng)加載成功!
成功地獲取數(shù)據(jù)庫(kù)連接!
到此這篇關(guān)于Java DriverManager.getConnection()獲取數(shù)據(jù)庫(kù)連接的文章就介紹到這了,更多相關(guān)Java DriverManager.getConnection() 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springBoot集成redis(jedis)的實(shí)現(xiàn)示例
Redis是我們Java開發(fā)中,使用頻次非常高的一個(gè)nosql數(shù)據(jù)庫(kù),本文主要介紹了springBoot集成redis(jedis)的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09springboot控制層傳遞參數(shù)為非必填值的操作
這篇文章主要介紹了springboot控制層傳遞參數(shù)為非必填值的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10實(shí)例講解Java中random.nextInt()與Math.random()的基礎(chǔ)用法
今天小編就為大家分享一篇關(guān)于實(shí)例講解Java中random.nextInt()與Math.random()的基礎(chǔ)用法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-02-02Java判斷List中相同值元素的個(gè)數(shù)實(shí)例
今天小編就為大家分享一篇Java判斷List中相同值元素的個(gè)數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07Myeclipse工程發(fā)布時(shí)端口占用問題的解決方法
這篇文章主要介紹了Myeclipse工程發(fā)布時(shí)端口占用問題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12springBoot中的CORS跨域注解@CrossOrigin詳解
這篇文章主要介紹了springBoot中的CORS跨域注解@CrossOrigin詳解,通常,服務(wù)于?JS?的主機(jī)(例如?example.com)與服務(wù)于數(shù)據(jù)的主機(jī)(例如?api.example.com)是不同的,在這種情況下,CORS?可以實(shí)現(xiàn)跨域通信,需要的朋友可以參考下2023-12-12Servlet+JavaBean+JSP打造Java Web注冊(cè)與登錄功能
比作MVC的話,控制器部分采用Servlet來實(shí)現(xiàn),模型部分采用JavaBean來實(shí)現(xiàn),而大部分的視圖采用Jsp頁(yè)面來實(shí)現(xiàn),接下來我們就來詳細(xì)看看如何用Servlet+JavaBean+JSP打造Java Web注冊(cè)與登錄功能2016-05-05