1

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

JDK 1.7 と互換性のある MySQL ドライバーのバージョンはどれですか?

4

2 に答える 2

3

例外メッセージには次のように記載されています。

「原因: java.lang.RuntimeException:コンパイルできないソース コード- com.mysql.jdbc.NonRegisteringDriver は抽象的ではなく、java.sql.Driver の抽象メソッド getParentLogger() をオーバーライドしません」

問題は、あなた (または他の誰か) がソース コードから JDBC ドライバーをビルドしようとした/試みたことがあり、コンパイル エラーがあったことに気付かず、結果として壊れた ".class" ファイルを JAR ファイルにアセンブルしたことだと思います。


MySQL の Web サイトにある標準の Connector/J ドライバー JAR ファイルは、Java 7 で動作するはずです。確かに、このような問題は経験したことがありません。


すべてが「完璧」であるというあなたの保証よりも、例外メッセージで確認できる証拠を信じる傾向があります。

  • MySQL Web サイトからダウンロードした Connector/J JAR ファイルを使用していますか?

  • MD5 チェックサムをチェックして、本物であることを確認しましたか?

  • ソースからビルドした場合、正しくビルドするために必要な JRE バージョンに関する docs/readme.txt を読みましたか?

  • アプリケーションのクラスパスにドライバーの他の (壊れた) コピーがありますか?

于 2012-12-18T11:01:45.647 に答える
2
"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"

このメソッドは、 Java1.7getParentLogger()のインターフェースに導入されました。Driver

Java 1.7をサポートするMySQLドライバーを見つけるか、Java1.6に切り替えます。

編集:追加情報:

JDK1.7.10と次の名前のドライバーJarをテストしました。mysql-connector-java-5.1.6-bin.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/JREのインストールにも問題があります。JDKをインストールするときに、SQLドライバーを更新する必要があります。
JDKをアンインストールして再インストールしてみてください。

于 2012-12-18T11:14:28.617 に答える