正如中所解释的“Class.forName()”和“Class.forName().newInstance()”有什么区别? https://stackoverflow.com/questions/2092659/what-is-the-difference-between-class-forname-and-class-forname-newinstanc,方法 Class.forName() 执行以下操作:
调用 Class.forName(String) 返回与给定字符串名称的类或接口关联的 Class 对象
但是,如果它只是这样做,那么为什么需要调用这个方法才能将 MySQL 与 Java 一起使用呢?如果没有它,我会收到以下错误:
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/calender
at java.sql.DriverManager.getConnection(DriverManager.java:689)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at Database.main(Database.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
它注册它是因为它将类加载到内存中并运行类的静态初始值设定项。然后,静态初始化程序代码调用 JDBC 框架来表示“您好,我是 JDBC 驱动程序”(通过调用DriverManager.registerDriver http://docs.oracle.com/javase/8/docs/api/java/sql/DriverManager.html#registerDriver-java.sql.Driver-).
例如,驱动程序类将看起来vaguely像这样:
package com.example.jdbc;
import java.sql.DriverManager;
public class Driver implements java.sql.Driver {
static {
DriverManager.registerDriver(new Driver());
}
// ...implementation...
}
然后当你这样做时Class.forName("com.example.jdbc.Driver")
,它加载类并运行静态初始化程序,该初始化程序创建一个实例并将其注册到DriverManager
.
我应该注意的是正如安德烈亚斯所说 https://stackoverflow.com/questions/32922459/why-does-calling-class-fornamecom-mysql-jdbc-driver-register-the-mysql-for-j/32922475#comment53671714_32922459,现代 JDBC 驱动程序不需要您这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)