Class.forName(“com.mysql.jdbc.Driver“)
程序员文章站
2022-03-10 17:06:49
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
下一篇: webgl(一):开发环境配置
推荐阅读
-
java中Class.forName的作用浅谈
-
java中Class.forName方法的作用详解
-
java中Class.forName方法的作用详解
-
浅析使用JDBC操作MySQL需要添加Class.forName("com.mysql.jdbc.Driver")
-
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驱动程序已被强制取消注册