一切從JAVA資料庫連接說起

來源:互聯網
上載者:User

在JAVA中初學者問的最多的就是資料庫連接,當然關於資料庫連接的方法網上也有很多的教程。說到資料庫連接,其中最重要的一點就是Class.forName()和DriverManager.getConnection(url,user,pwd);這兩句話。

首先我們來說說Class.forName(""): 這句話的意思呢就是說我們要先進行驅動的載入,就相當於我們用筆記本要開機首先要給筆記本電池衝上電是一個道理。。那麼我們充好電後筆記本要能識別電池才能正常工作。Class.forName("")裡面的參數就相當於電池的路徑。簡單的說:Class是運行中的class類,將forName("className")這個名為className的類裝入JVM, 這樣就可以動態載入類,通過Class的反射機制可以獲得此類的一些資訊。

而通常我們會在Class.forName("")寫成這樣Class.froName("").newInstance(); 在後面接上newInstance()有什麼用呢?其實很簡單:單單使用Class.forName("")是動態載入類是沒有用的,其最終目的是為了執行個體化對象。而Class.forName("").newInstance()返回的是object。有資料庫開發經驗朋友會發現,為什麼在我們載入資料庫驅動包的時候有的卻沒有調用newInstance( )方法呢?即有的jdbc串連資料庫的寫法裡是Class.forName(xxx.xx.xx);而有一些:Class.forName(xxx.xx.xx).newInstance(),為什麼會有這兩種寫法呢?

Class.forName("");的作用是要求JVM尋找並載入指定的類,如果在類中有靜態初始化器的話,JVM必然會執行該類的靜態程式碼片段。而在JDBC規範中明確要求這個Driver類必須向DriverManager註冊自己,即任何一個JDBC Driver的Driver類的代碼都必須類似如下:

 

 1 public class MyJDBCDriver implements Driver {
 2 
 3 static {
 4 
 5 DriverManager.registerDriver(new MyJDBCDriver());
 6 
 7 }
 8 
 9 }
10 

 

 

既然在靜態初始化器的中已經進行了註冊,所以我們在使用JDBC時只需要Class.forName(XXX.XXX);就可以了。

 

那麼好,瞭解了Class.forName(""),我們接著來瞭解下DriverManager.getConnection(url,user,pwd);這個方法是什麼意思呢,還是拿筆記本來舉例。我們筆記本上了電池了而且機器已經識別了電池並且載入了一定的電量,那麼好,現在我們筆記本可以開機了恩,不過開機後,我們還要做一件事情,什麼事情呢,我們的電腦上安裝了作業系統,那麼我們需要選擇進入那個作業系統,而url就相當於我們要用哪個資料庫。那麼如果是個多使用者的作業系統,我們要選擇相應的使用者,那麼好user就相當於資料庫的使用者名稱。至於pwd很簡單,當然就是登陸的密碼了。

好現在我們來具體分析下整個資料庫連接類的寫法:

 

 1 import java.sql.Connection; 
 2 import java.sql.DriverManager; 
 3 import java.sql.SQLException; 
 4 
 5 /** 
 6 * 資料庫連接類 
 7 * 
 8 * @author funnyking 
 9 * 
10 */ 
11 public class SqlConnetction { 
12 
13     /** 
14      * 資料庫連接方法(靜態) 
15      * 
16      * @return Connection 
17      * @throws ClassNotFoundException 
18      * @throws SQLException 
19      */ 
20     public static Connection getConnetction() throws SQLException { 
21         Connection conn = null; 
22         try { 
23             // 直連驅動 
24             Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 
25 
26         } catch (ClassNotFoundException e) { 
27             // TODO Auto-generated catch block 
28             System.out.println("載入驅動異常:" + e.getMessage()); 
29         } 
30         // 資料庫連接地址 
31         String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=PM"; 
32         // 使用者名稱 
33         String user = "sa"; 
34         // 密碼 
35         String password = ""; 
36         conn = DriverManager.getConnection(url, user, password); 
37 
38         return conn; 
39 
40     } 
41 
42     /** 
43      * 關閉Connection方法(靜態) 
44      * 
45      */ 
46     public static void getCloseConnettion(Connection conn) { 
47         try { 
48             conn.close(); 
49         } catch (SQLException e) { 
50             // TODO Auto-generated catch block 
51             System.out.println("關閉資料連線異常:" + e.getMessage()); 
52         } 
53     } 
54 
55 }
56 
57 
58 
59 

基本寫法也就是這樣了,好了,下面貼出不同資料庫的串連方法:

1、Oracle8/8i/9i資料庫(thin模式)
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl為資料庫的SID
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password);

2、DB2資料庫
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sample為你的資料庫名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);

3、Sql Server7.0/2000資料庫
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
//mydb為資料庫
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);

4、Sybase資料庫
Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/myDB";
//myDB為你的資料庫名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);

5、Informix資料庫
Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//myDB為資料庫名
Connection conn= DriverManager.getConnection(url);

6、MySQL資料庫
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
//myDB為資料庫名
Connection conn= DriverManager.getConnection(url);

7、PostgreSQL資料庫
Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/myDB"
//myDB為資料庫名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.