4

jdbc の mysql ドライバーに関するさらに別の質問があります。私がグーグルで検索したときに得た検索結果の数を考えると、私が見つけたものは何もうまくいかなかった.

エラー:

hostname# java -cp /usr/share/java/mysql-connector.jar:/home/user JDBCTest
java.sql.SQLException: No suitable driver found for jdbc:mysql://<db ip>:3306/dbname
 at java.sql.DriverManager.getConnection(DriverManager.java:596)
 at java.sql.DriverManager.getConnection(DriverManager.java:215)
 at JDBCTest.main(sqltest.java:14)

コード (簡単なハウツーから抜粋):

import java.sql.Connection;
import java.sql.DriverManager;

class JDBCTest {

    private static final String url = "jdbc:mysql://dbipaddress:3306/dbname";

    private static final String user = "username";

    private static final String password = "password";

    public static void main(String args[]) {
        try {
            Connection con = DriverManager.getConnection(url, user, password);
            System.out.println("Success");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

/usr/share/java/mysql-connector-java.jar がクラスの正しいパスであることは 90% 確実です。それは私がオンラインとlocateの両方で見つけたものです。

CLASSPATH=$CLASSPATH:/usr/share/java/mysql-connector-java.jar環境クラスパスを/etc/environment に設定しようとしました。ご覧のとおり、-cp フラグも試しました。

コマンド ライン mysql-client を使用して、JDBCTest クラスにある資格情報で mysql サーバーとデータベースに接続できます。したがって、db サーバーまたはユーザー/パスワードのエラーではありません。

私が知る限り、私の jdbc URL は正しいです。それは、検索中に見つけたより一般的な問題の1つでした...

サーバーで Ubuntu 12.04 64 ビットを使用しています。

libmysql-java がインストールされています。そのまま、openjdk-7-jre-headless です。

これは完全にTomcatの外部で実行しているため、ドライバーをTomcatのディレクトリにコピーするというすべての回答は適用されません。

だから、私は困惑しています。-cp フラグを使用すると、強制的に機能すると思います。私のJavaインストールに欠けているものはありますか? openjdk-7-jre-headless から除外されたものはありますか?

これを修正するにはどうすればよいですか?

注: このクラスは、より大きな (独自の) アプリがデータベースに接続しない理由を診断するのに役立つ簡単なテストです。より大きなアプリは同じエラーをスローします。この小さなクラスを修正することで、より大きなアプリが修正されることを願っています。

4

2 に答える 2

3

JDBC 4 に準拠していないバージョンの MySQL JDBC ドライバーを使用している可能性があるため、 によって自動的にロードされませんDriverManager。その場合、次を使用して明示的にロードする必要があります。

Class.forName("com.mysql.jdbc.Driver");

もう 1 つのオプションは、JDBC 4 に準拠し、自動的にロードされるライブラリのバージョンを使用することです。

于 2013-11-13T09:45:14.310 に答える
1

メイン メソッドの最初の行に次を追加してみてください。

Class.forName("com.mysql.jdbc.Driver");

例外がスローされた場合、JVM は にアクセスできません/usr/share/java/mysql-connector.jar。その場合は、次を使用してファイルのアクセス許可を確認します。

ls -lah /usr/share/java/mysql-connector.jar

少なくともこのファイルへの読み取りアクセス権が必要であり、明らかにファイルが存在している必要があります。

于 2013-11-13T01:15:18.217 に答える