溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么在Java中使用DriverManager.getConnection()獲取數(shù)據(jù)庫連接

發(fā)布時(shí)間:2021-01-21 14:58:17 來源:億速云 閱讀:557 作者:Leah 欄目:開發(fā)技術(shù)

怎么在Java中使用DriverManager.getConnection()獲取數(shù)據(jù)庫連接?相信很多沒有經(jīng)驗(yàn)的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

DriverManager.getConnection一共有四個(gè)重載方法,前三個(gè)由public修飾,用來獲取不同類型的參數(shù),這三個(gè)getConnection實(shí)際相當(dāng)于一個(gè)入口,他們最終都會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)用該方法會導(dǎo)致UnsupportedOperationException異常。

JDK8中g(shù)etCallerClass使用方法變更為getCallerClass(),Reflection.getCallerClass()方法調(diào)用所在的方法必須用@CallerSensitive進(jìn)行注解,通過此方法獲取class時(shí)會跳過鏈路上所有的有@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ù)庫 URL 的連接。DriverManager 試圖從已注冊的 JDBC 驅(qū)動程序集中選擇一個(gè)適當(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; //返回一個(gè)連接
}

語法2

getConnection(String url,Properties info)

參數(shù)說明:

  • url:訪問數(shù)據(jù)庫的 URL 路徑。

  • info:是一個(gè)持久的屬性集對象,包括 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;//返回一個(gè)連接
}

語法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ù)庫連接失?。?quot;);
  con = null;
  e.printStackTrace();
 }
 return con;
}

運(yùn)行結(jié)果如下:
數(shù)據(jù)庫驅(qū)動加載成功!
成功地獲取數(shù)據(jù)庫連接!

看完上述內(nèi)容,你們掌握怎么在Java中使用DriverManager.getConnection()獲取數(shù)據(jù)庫連接的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI