JDBC注冊驅動程序的三種方式


1. Class.forName("com.mysql.jdbc.Driver");//加載數據庫驅動

Class.forName("com.mysql.jdbc.Driver");//加載數據庫驅動  
String url="jdbc:mysql://localhost:3306/databasename";//數據庫連接子協議  
Connection conn=DriverManager.getConnection(url,"username","password"); 

此方式由於參數為字符串,因此很容易修改,移植性強。

最常見的注冊方式,也是推薦的方式。

第一種的好處在於能夠在編譯時不依賴於特定的JDBC Driver庫,也就是減少了項目代碼的依賴性,而且也很容易改造成從配置文件讀取JDBC配置,從而可以在運行時動態更換數據庫連接驅動。

private String dbUrl; private String driverClassName; private String userName; private String passWord; private Connection conn =null; private PreparedStatement ps =null; private ResultSet rs = null; //初始化數據庫
 @Override public void init(ServletConfig config) throws ServletException { //加載驅動
        try { this.dbUrl = config.getInitParameter("dbUrl"); this.driverClassName = config.getInitParameter("driverClassName"); this.userName = config.getInitParameter("userName"); this.passWord = config.getInitParameter("passWord"); Class.forName(driverClassName); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block
 e.printStackTrace(); } }


//數據庫的查詢
    public String getNickName(String openid) throws SQLException{ String nickName = ""; //創建數據庫鏈接
        conn = DriverManager.getConnection(dbUrl, userName, passWord); String sql = "select nickname from user where openid = ?"; ps = conn.prepareStatement(sql); ps.setString(1, openid); rs = ps.executeQuery(); while (rs.next()) { nickName = rs.getString("nickname"); } //關閉鏈接
 rs.close(); ps.close(); conn.close(); return nickName; }

 

2.System.setProperty("jdbc.drivers","com.mysql.jdbc.Driver");

System.setProperty("jdbc.driver","com.mysql.jdbc.Driver");//系統屬性指定數據庫驅動  
String url="jdbc:mysql://localhost:3306/databasename";//數據庫連接子協議  
Connection conn=DriverManager.getConnection(url,"username","password");  

可以同時導入多個jdbc驅動,中間用冒號“:”分開

比如System.setProperty("jdbc.drivers","XXXDriver:XXXDriver:XXXDriver");

這樣就一次注冊了三個數據庫驅動

3. new com.mysql.jdbc.Driver() ;//創建driver對象,加載數據庫驅動

new com.mysql.jdbc.Driver();//創建driver對象,加載數據庫驅動  
String url="jdbc:mysql://localhost:3306/databasename";//數據庫連接子協議  
Connection conn=DriverManager.getConnection(url,"username","password");  

  這里不需要這樣寫DriverManager.registerDriver(new com.mysql.jdbc.Driver()),原因是com.mysql.jdbc.Driver類的靜態代碼快里面已經進行了修改的操作。我們通過Driver類的源碼可以了解到,Driver類中就有一個靜態的代碼塊,只要我們執行了Driver類中的靜態代碼塊,並把驅動的實例放入到Drivers的一個數組列表中,我們再調用方法registerDrever就相當於又向drivers列表中放了一次driver驅動,雖然這並不影響我們程序,但是這樣做實在是沒有必要,還會影響程序的運行。

static {  
   try {  
      java.sql.DriverManager.registerDriver(new Driver());  
   } catch (SQLException E) {  
      throw new RuntimeException("Can't register driver!");  
   }  
}  

  由new com.mysql.jdbc.Driver()可以知道,這里需要創建一個類的實例。創建類的實例就需要在java文件中將該類通過import導入,否則就會報錯,即采用這種方式,程序在編譯的時候不能脫離驅動類包,為程序切換到其他數據庫帶來麻煩

jdbc是使用橋的模式進行連接的。DriverManager就是管理數據庫驅動的一個類,java.sql.Driver就 是一個提供注冊數據庫驅動的接口,而com.microsoft.sqlserver.jdbc.SQLServerDriver()是 java.sql.Driver接口的一個具體實現。

第二種與第三種注冊的方法看起來更加的直接與好理解。第一種方法是通過Class把類先裝載到java的虛擬機中,並沒有創建Driver類的實例。
第一種與第二種方法可以脫離jdbc的驅動進行編譯,第三種方法不可以的,它一定要有jdbc的驅動才可以通過編譯,這樣對我們的程序就有很多的不好之處,為程序換數據庫會帶來麻煩。

所以推薦使用第一種方法來注冊驅動

總結:推薦1,和2兩種方式。
原因:3在編譯時需要導入對應的lib。1,2不需要。

//數據庫的查詢
    public String getNickName(String openid) throws SQLException{
        String nickName = "";
        //創建數據庫鏈接
        conn = DriverManager.getConnection(dbUrl, userName, passWord);
        String sql = "select nickname from user where openid = ?";
        ps = conn.prepareStatement(sql);
        ps.setString(1, openid);
        rs = ps.executeQuery();
        while (rs.next()) {
            nickName = rs.getString("nickname");
        }
        
        //關閉鏈接
        rs.close();
        ps.close();
        conn.close();
        
        return nickName;
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM