我是JDBC的新手,我写了一个小程序来检查注册的驱动程序.我想做以下事情
我检查了寄存器的数量而没有加载任何驱动程序:
我期待它给出了3名注册的车手让我感到惊讶.
我使用Class.forName()加载了一个驱动程序;
我期待它向我展示四位车手再次受到惊吓,它只显示3名车手
最后,我使用DriverManager注册驱动程序
现在它显示了四个驱动程序
任何人都可以帮助我理解这里发生的事情.我的问题如下
这三个驱动程序是否默认加载/注册.
不会使用Class.forName
注册驱动程序加载类?(我想答案不是因为从我的经验,我要求这只是为了确定)如果没有然后加载类只是为了寻求执行像(DriverManager等...)的界面
最后,加载驱动程序和注册驱动程序之间的区别是什么
我列出了程序和输出供您参考.
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++; } } }
输出:
Drivers registered initially
1 sun.jdbc.odbc.JdbcOdbcDriver@2c84d9
2 oracle.jdbc.OracleDriver@8bdcd2
3 com.mysql.jdbc.Driver@1f31ad9
Drivers after class loading
1 sun.jdbc.odbc.JdbcOdbcDriver@2c84d9
2 oracle.jdbc.OracleDriver@8bdcd2
3 com.mysql.jdbc.Driver@1f31ad9
After registering oracle driver
1 sun.jdbc.odbc.JdbcOdbcDriver@2c84d9
2 oracle.jdbc.OracleDriver@8bdcd2
3 com.mysql.jdbc.Driver@1f31ad9
4 oracle.jdbc.driver.OracleDriver@167acf2