目录
3、为什么删除Class.forName("com.mysql.jdbc.Driver")还是可以运行?
JDBC是Bridge模式的典型应用,DriverManager就是其中的Abstraction;java.sql.Driver是Implementor,com.mysql.jdbc.Driver是Implementor的一个具体实现。前一个Driver是一个接口,后者却是一个类,它实现了前面的Driver接口。 Bridge模式中,Abstraction(DriverManager)是要拥有一个Implementor(Driver)的引用的。
一般,我们在连接数据库时,会使用如下的代码:
try {
Class.forName("com.mysql.jdbc.Driver");
connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
} catch (Exception e) {
e.printStackTrace();
}
1、Class.forName()有什么作用呢?
首先,我们都知道,在java中Class.forName()方法在java中的作用是1、用于在JVM中查找并加载指定的类到内存中。2、初始化这个类
此时,我们将"com.mysql.jdbc.Driver"作为参数传入,是让JVM到"com.mysql.jdbc"路径下,找到Driver类并将其加载到内存中。
我们一起来看一下Driver类的详细代码:
public class Driver extends NonRegisteringDriver
implements java.sql.Driver
{
public Driver() throws SQLException{
}
static
{
try
{
DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
}
Class.forName(“com.mysql.jdbc.Driver”)的作用实际上就是调用DriverManager的 registerDriver方法注册一个mysql的JDBC驱动(Driver)而已(简而言之,就是将mysql驱动注册到DriverManager中去)。