当我运行试图连接到MySQL服务器的代码时,我一直收到错误消息。
Exception in thread "main" java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:375)这是我的密码。我已经确保将连接器/J添加到类路径中,但仍然没有更改。
import java.sql.*;
public class App {
public static void main(String[] args) throws Exception {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/vehicle", "root", "root"); // For MySQL only
vehicle focus = new vehicle("Ford", "Focus", 200, 2004, 3000);
System.out.println(focus.getMake());
}
}发布于 2022-09-11 22:55:04
首先,使用Class.forName加载JDBC驱动程序是不必要的,因为JDBC4.0是在2006年提供的(该驱动程序将其实现注册为服务提供者,并将由ServiceLoader加载)。
只要去掉这一行,它就能工作了。如果您需要类名,最好参考Connector/J的文档,注意读取文档以获得正确的驱动程序版本,因为类名更改了(目前是com.mysql.cj.jdbc.Driver)。
更新
正如Mark所指出的那样,Class.forName("com.mysql.jdbc.Driver")将不会导致与较新版本的Connector/J一起使用的ClassNotFoundException。至少最新的驱动程序会产生警告:
加载类
com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver‘。驱动程序是通过SPI自动注册的,手动加载驱动程序类通常是不必要的。
知道了这一点,删除Class.forName不会有帮助,因为异常仅仅意味着驱动程序不在类路径上。
https://stackoverflow.com/questions/73682996
复制相似问题