加载驱动程序和注册驱动程序之间的区别

Use*_*854 6 java database-connection jdbc

我是JDBC的新手,我写了一个小程序来检查注册的驱动程序.我想做以下事情

  1. 我检查了寄存器的数量而没有加载任何驱动程序:

    我期待它给出了3名注册的车手让我感到惊讶.

  2. 我使用Class.forName()加载了一个驱动程序;

    我期待它向我展示四位车手再次受到惊吓,它只显示3名车手

  3. 最后,我使用DriverManager注册驱动程序

    现在它显示了四个驱动程序

任何人都可以帮助我理解这里发生的事情.我的问题如下

  1. 这三个驱动程序是否默认加载/注册.
  2. 不会使用Class.forName注册驱动程序加载类?(我想答案不是因为从我的经验,我要求这只是为了确定)如果没有然后加载类只是为了寻求执行像(DriverManager等...)的界面
  3. 最后,加载驱动程序和注册驱动程序之间的区别是什么

我列出了程序和输出供您参考.

import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;
import oracle.jdbc.driver.OracleDriver;

class Test3{
 public static void main(String[] args) throws Exception{

     //checking for registered drivers
     System.out.println("Drivers registered initially");
     Enumeration enumm = DriverManager.getDrivers();
     int count=1;
     while(enumm.hasMoreElements()){
         Driver dr=(Driver)enumm.nextElement();
         System.out.println(count+" "+dr);
         count++;
     }

     //loading the driver
     Class.forName("oracle.jdbc.driver.OracleDriver");
     System.out.println("\n\nDrivers after class loading");
     enumm = DriverManager.getDrivers();
     count=1;
     while(enumm.hasMoreElements()){
         Driver dr=(Driver)enumm.nextElement();
         System.out.println(count+" "+dr);
         count++;
     }

     //After Registering driver
     OracleDriver odr= new OracleDriver();
     DriverManager.registerDriver(odr);
     System.out.println("\nAfter registering oracle driver");
     enumm = DriverManager.getDrivers();
     count=1;
     while(enumm.hasMoreElements()){
         Driver dr=(Driver)enumm.nextElement();
         System.out.println(count+" "+dr);
         count++;
     }

}
}
Run Code Online (Sandbox Code Playgroud)

输出:

Drivers registered initially
Run Code Online (Sandbox Code Playgroud)

1 sun.jdbc.odbc.JdbcOdbcDriver@2c84d9

2 oracle.jdbc.OracleDriver@8bdcd2

3 com.mysql.jdbc.Driver@1f31ad9

Drivers after class loading
Run Code Online (Sandbox Code Playgroud)

1 sun.jdbc.odbc.JdbcOdbcDriver@2c84d9

2 oracle.jdbc.OracleDriver@8bdcd2

3 com.mysql.jdbc.Driver@1f31ad9

After registering oracle driver
Run Code Online (Sandbox Code Playgroud)

1 sun.jdbc.odbc.JdbcOdbcDriver@2c84d9

2 oracle.jdbc.OracleDriver@8bdcd2

3 com.mysql.jdbc.Driver@1f31ad9

4 oracle.jdbc.driver.OracleDriver@167acf2

Nav*_*wat 2

从 JDK6 开始,如果 JVM 在类路径中找到任何驱动程序类,则会自动加载 JDBC 驱动程序。JDK6中不再需要Class.forName语句。这就是您获取驱动程序的原因,因为它们位于您的类路径中并由 JVM 加载。