I安装了JDK 1.7,并尝试连接到不同的MySQL数据库和Connector/J版本。但每次,我都会在加载驱动程序时出现以下错误:
Exception in thread "main" java.lang.ExceptionInInitializerError
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:186)
at jdbc.JDBC.main(JDBC.java:24)
Caused by: java.lang.RuntimeException: Uncompilable source code - com.mysql.jdbc.NonRegisteringDriver is not abstract and does not override abstract method getParentLogger() in java.sql.Driver
at com.mysql.jdbc.NonRegisteringDriver.<clinit>(NonRegisteringDriver.java:69)
... 3 more
哪个MySQL驱动程序版本与JDK1.7兼容?
异常消息显示:
"由:java.lang.RuntimeException引起:不可编译的源代码.com.mysql.jdbc.NonRegisteringDriver不是抽象的,并且不会覆盖java.sql.Driver中的抽象方法getParentLogger()">
我认为问题是您(或其他人)试图从源代码构建JDBC驱动程序,但没有注意到存在编译错误,并将由此产生的损坏的".class"文件组装到JAR文件中。
MySQL网站上的标准连接器/J驱动程序JAR文件应该可以与Java7一起使用。当然,我从来没有遇到过这样的问题。
我更倾向于相信我在异常消息中看到的证据,而不是你保证一切都是"完美的":
-
您确定使用的是从MySQL网站下载的Connector/JJAR文件吗?
-
你检查了MD5校验和以确保你得到了真实的东西吗?
-
如果您是从源代码构建的,您是否阅读了docs/readme.txt中关于正确构建所需JRE版本的内容?
-
您的应用程序的类路径上是否有其他(损坏的)驱动程序副本?
"Caused by: java.lang.RuntimeException: Uncompilable source code -
com.mysql.jdbc.NonRegisteringDriver is not abstract and does not override
abstract method getParentLogger() in java.sql.Driver"
方法getParentLogger()
被引入到Java 1.7中的Driver
接口中。
找到一个支持Java 1.7的MySQL驱动程序,或者切换回Java 1.6。
编辑:附加信息:
我测试了JDK1.7.10和一个名为mysql-connector-java-5.1.6-bin.jar
的驱动程序Jar
使用以下代码:
public static void main(String[] args) throws ClassNotFoundException,
InstantiationException, IllegalAccessException, SQLException {
System.out.println("Java version: "
+ System.getProperty("java.version"));
Driver driver = (Driver) Class.forName("com.mysql.jdbc.Driver")
.newInstance();
System.out.println("JDBC driver: " + driver.getMajorVersion() + "."
+ driver.getMinorVersion());
Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/DBNAME", "user", "pass");
System.out.println("Connection: " + connection.getClass().getName());
}
它给出以下输出:
Java version: 1.7.0_10
JDBC driver: 5.1
Connection: com.mysql.jdbc.JDBC4Connection
您可能也有JDK/JJRE安装问题。在安装JDK时,它希望更新SQL驱动程序
您可以尝试卸载并重新安装JDK。