`

JDBC连结中Class.forName()详解

 
阅读更多

java开发中,采用JDBC连接数据库,最经常用到的就是Class.forName()这个方法.

Class.forName(String className)在JDK帮助文档中是这样说的:返回与带有给定字符串名的类或接口相关联的Class对象,

参数className是所需类的完全限定名;返回值是具有指定名的类的Class对象.如调用Class.forName("x") 将导致名为x的类被初始化.

 

JDBC连接中,以mysql为例,取得数据库连结代码如下:

 

[java] 
  1. Class.forName("com.mysql.jdbc.Driver");      
  2. String url = "jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8";      
  3. String user = "test";      
  4. String psw = "test";      
  5. Connection con = DriverManager.getConnection(url,user,psw);    
[java] 
  1. Class.forName("com.mysql.jdbc.Driver");      
  2. String url = "jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8";      
  3. String user = "test";      
  4. String psw = "test";      
  5. Connection con = DriverManager.getConnection(url,user,psw);    

 

 

 

DriverManager.getConnection()可以取到driver是因为Class.forName("...")方法已经要求JVM查找并加载指定的类(即com.mysql.jdbc.Driver类),而jdk对Driver的说明中有以下一段话:
     When a Driver class is loaded, it should create an instance of itself and register it with the DriverManager

查看com.mysql.jdbc的原代码如下:

 

[java]
  1. package com.mysql.jdbc      
  2.      
  3. public class Driver extends NonRegisteringDriver implements java.sql.Driver {      
  4.  // ~ Static fields/initializers       
  5.  // --------------------------------------------- //       
  6.  // Register ourselves with the DriverManager       
  7.  //       
  8.  static {      
  9.     t ry {      
  10.               java.sql.DriverManager.registerDriver(new Driver());      
  11.           } catch (SQLException E) {      
  12.               throw new RuntimeException("Can't register driver!");      
  13.           }      
  14.   }      
  15. // ~ Constructors       
  16.  // -----------------------------------------------------------       
  17. /**    
  18.   * Construct a new driver and register it with DriverManager    
  19.   *     
  20.   * @throws SQLException    
  21.   *             if a database error occurs.    
  22.   */     
  23.  public Driver() throws SQLException {      
  24.      // Required for Class.forName().newInstance()       
  25.  }      
  26. }     
[java] 
  1. package com.mysql.jdbc      
  2.      
  3. public class Driver extends NonRegisteringDriver implements java.sql.Driver {      
  4.  // ~ Static fields/initializers      
  5.  // --------------------------------------------- //      
  6.  // Register ourselves with the DriverManager      
  7.  //      
  8.  static {      
  9.     t ry {      
  10.               java.sql.DriverManager.registerDriver(new Driver());      
  11.           } catch (SQLException E) {      
  12.               throw new RuntimeException("Can't register driver!");      
  13.           }      
  14.   }      
  15. // ~ Constructors      
  16.  // -----------------------------------------------------------      
  17. /**    
  18.   * Construct a new driver and register it with DriverManager    
  19.   *     
  20.   * @throws SQLException    
  21.   *             if a database error occurs.    
  22.   */     
  23.  public Driver() throws SQLException {      
  24.      // Required for Class.forName().newInstance()      
  25.  }      
  26. }     

  

 

 

 

从而通过Class.forName(DriverString)会向DriverManager注册该Driver类.所以可以直接调用.

 

而Class.forName("").newInstance()则等于是将该Driver驱动类实例化,返回该类的一个实例,所以,如果只是取JDBC的Driver驱动,可

以不必用newInstance().

 

原话是这样的:

we just want to load the driver to jvm only, but not need to user the instance of driver, so call Class.forName(xxx.xx.xx) is enough, if you call Class.forName(xxx.xx.xx).newInstance(), the result will same as calling Class.forName(xxx.xx.xx), because Class.forName(xxx.xx.xx).newInstance() will load driver first, and then create instance, but the instacne you will never use in usual, so you need not to create it

分享到:
评论

相关推荐

    java中Class.forName方法的作用详解

    总的来说,`Class.forName()`在Java中起到了动态加载和初始化类的关键作用,尤其在JDBC和其他需要延迟加载或动态选择实现的场景中。了解这个方法的工作原理,对于理解Java程序的运行机制和优化代码是十分重要的。在...

    sqljdbc4-4.0.jar

    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=myDB", "username", "password"); ``` 在这个...

    jdbc驱动程序实例

    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; // orcl为数据库的SID String user = "test"; String password = "test"; Connection ...

    sqljdbc4-4.0.jar.zip

    1. 加载驱动:使用Class.forName()方法加载sqljdbc4-4.0.jar中的Driver类,例如`Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");` 2. 创建连接:通过DriverManager.getConnection()方法创建数据库...

    sqljdbc4-4.0.jar包.zip

    3. **注册驱动**:在使用连接之前,需要通过Class.forName()方法注册JDBC驱动。 4. **执行SQL**:创建Statement或PreparedStatement对象,然后调用executeQuery()或executeUpdate()方法执行SQL语句。 5. **处理...

    java于各种数据库连接额语句

    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; // orcl 为数据库SID String user = "test"; String password = "test"; ...

    java通过jdbc连接oracle数据库.docx

    Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection(URL, USERNAME, PASSWORD); } catch (Exception e) { e.printStackTrace(); } return conn; } public static void...

    sqljdbc4.1-4.2.0.jar:

    1. 加载驱动:`Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");` 2. 创建连接:`Connection conn = DriverManager.getConnection(url, username, password);` 3. 执行SQL:`Statement stmt = conn....

    jdbc数据库连接大全.txt

    Class.forName("oracle.jdbc.driver.OracleDriver"); // 建立数据库连接 String url = "jdbc:oracle:thin:@localhost:1521:orcl"; // orcl为Oracle服务名(SID) String user = "test"; String password = "test"; ...

    JDBC连接各种数据库字符串大全

    - **Class.forName("oracle.jdbc.driver.OracleDriver"):** 加载Oracle JDBC驱动类。 - **newInstance():** 创建OracleDriver类的新实例。 - **url:** 数据库连接字符串,其中`localhost`是服务器地址,`1521`是监听...

    JDBC常用连接串

    Class.forName("oracle.jdbc.driver.OracleDriver"); Connection cn = DriverManager.getConnection("jdbc:oracle:[thin|oci]://[hostname]:[port]/[service_name]", "[username]", "[password]"); ``` 其中: - `...

    JDBC数据连接源码.rar

    这通常通过`Class.forName()`方法完成,例如`Class.forName("com.mysql.jdbc.Driver")`来加载MySQL的JDBC驱动。 2. **建立连接**:使用`DriverManager.getConnection()`方法创建到数据库的连接。参数通常包括数据库...

    java jdbc连接数据库

    Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; ``` ##### 5. 使用jTDS连接SQL Server 2000 如果使用jTDS驱动连接SQL Server 2000,则需要jtds-1.2....

    jdbc连接各种数据库方式列表.txt

    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; // orcl 为数据库 SID String user = "test"; String password = "test"; Connection ...

    jdbc连接各种数据库方式列表

    Class.forName("oracle.jdbc.driver.OracleDriver"); // 定义连接参数 String url = "jdbc:oracle:thin:@localhost:1521:orcl"; // orcl 为 SID String user = "test"; String password = "test"; // 建立连接 ...

    JDBC连接各种数据库速查表

    1. **加载 JDBC 驱动:** 使用 `Class.forName()` 方法来加载特定数据库的 JDBC 驱动。 2. **建立连接:** 使用 `DriverManager.getConnection()` 方法建立到数据库的连接。 3. **创建 Statement 或 ...

    sqljdbc_6.0.8112.200_chs.rar

    - 加载驱动:`Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");` - 创建连接:`Connection conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=myDB", "username...

Global site tag (gtag.js) - Google Analytics