JDBC中在getConnection之前调用Class.forName的功能是什么呢?
下文笔者讲述Class.forName的功能简介说明,如下所示
oracle.jdbc.driver.OracleDriver中有个static块,如下所示com.mysql.jdbc.Driver中static块
常见的数据库连接写法
String driver = "oracle.jdbc.OracleDriver"; String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl" ; String user = "scott" ; String password = "123456" ; Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, password); //当我们注释掉 Class.forName(driver);这句话后 //则报 java.sql.SQLException: No suitable driver found for xxx…. //异常
Class.forName(driver)的功能
Class.forName(xxx.xx.xx) 返回的是一个类 Class.forName(xxx.xx.xx)的功能: 要求JVM查找并加载指定的类 同时JVM会运行该类的静态代码段例:Class.forName("oracle.jdbc.driver.OracleDriver")后
oracle.jdbc.driver.OracleDriver中有个static块,如下所示
static { Timestamp localTimestamp = Timestamp.valueOf("2000-01-01 00:00:00.0"); try { if(defaultDriver == null ) { defaultDriver = new OracleDriver(); DriverManager.registerDriver(defaultDriver); } } catch (RuntimeException localRuntimeException) { } catch (SQLException localSQLException){} _Copyright_2004_Oracle_All_Rights_Reserved_ = null ; }
com.mysql.jdbc.Driver中static块
static
{
try {
DriverManager.registerDriver(new Driver());
}
catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
所有的驱动都遵守这种写法
都有 DriverManager.registerDriver(driver)
这个动作
那么我们可以得出一个结论
Class.forName("")
可以为JDBC加载驱动,
所以必须在getConnection()前面使用Class.forName("******")加载驱动
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。