Class.forName(“com.mysql.jdbc.Driver“)
程序员文章站
2022-06-28 10:08:47
JDBC 注册驱动类, public static void main(String[] args) throws ClassNotFoundException, SQLException { Class.forName("learn.jdbc.MyDriver"); Enumeration drivers = DriverManager.getDrivers(); while (drivers.hasM...
JDBC 注册驱动类,
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("learn.jdbc.MyDriver");
Enumeration<Driver> drivers = DriverManager.getDrivers();
while (drivers.hasMoreElements()) {
Driver driver = drivers.nextElement();
System.out.println(driver.getClass().getName());
}
}
经常看到Class.forName(“xxx.xxx.Driver”)的写法,那为什么要这样写咧?这样写,xxx.xxx.Driver是怎样注册到DriverManager里面的咧?
调试代码,在Class.forName(“learn.jdbc.MyDriver”);断点;可以看到,进入类加载过程;看看MyDriver的代码
public class MyDriver implements Driver {
static {
try {
DriverManager.registerDriver(new MyDriver());
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
@Override
public Connection connect(String url, Properties info) throws SQLException {
return null;
}
......省略
}
自定义的一个类,实现Driver接口,方法全部没有实现业务;主要看static静态块; 这里就是MyDriver注册到DriverMange中的代码;利用类加载机制,在最后一步,初始化类,要初始statis成员和执行static静态块的过程,把MyDriver注册到DriverMange中;
为什么要这样写, 类加载是同步的,只会加载一次,初始statis成员和执行static静态块的过程也只会执行一次,这样可以达到单例效果;
如何没有在static块中写,注册到DriverMange中的代码, 就得自己主动new MyDriver()注册到DriverMange,经常看到有人说,自己主动new Driver()注册是多余浪费,那可不一定,具体还得看Driver的实现代码,才能判定。
mysql的驱动代码
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
public Driver() throws SQLException {
}
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
}
本文地址:https://blog.csdn.net/wqh754186373/article/details/112006747
上一篇: 浅淡网站优化中哪些因素会影响网站在搜索引擎中的排名?
下一篇: 草根站长建站一年的所思以及所想
推荐阅读
-
com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的区别
-
idea启动项目报错Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
-
com.mysql.jdbc.Driver和com.mysql.cj.jdbc.Driver的区别
-
Class.forName···关于Class. 的应用介绍
-
Java中new和Class.forName的区别
-
Web应用程序 [new_system] 注册了JDBC驱动程序 [com.mysql.jdbc.Driver],但在Web应用程序停止时无法注销它。 为防止内存泄漏,JDBC驱动程序已被强制取消注册
-
Class.forName(“com.mysql.jdbc.Driver“)
-
Class.forName 和 ClassLoader 到底有啥区别?
-
class.forName( )报错
-
registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregister it w