web-dev-qa-db-ja.com

プールの使用時に "jdbc:mysql:// localhost / dbnameに適したドライバが見つかりませんでした"というエラーが表示される

私は自分のデータベースへの接続を作成しようとしています、私がmainメソッドを使って自分のコードをテストするとき、それはシームレスに動作します。しかし、Tomcat 7を介してアクセスしようとすると、エラーで失敗します。

No suitable driver found for jdbc:mysql://localhost/dbname. 

私はプールを使用しています。 mysqlコネクター(5.1.15)、dbcp(1.4)、およびpool(1.4.5)ライブラリーをWEB-INF/libおよび.classpathに入れました。私はEclipse IDEを使っています。データベースドライバの私のコードは次のとおりです。

import Java.sql.Connection;
import Java.sql.DriverManager;
import Java.sql.SQLException;

import org.Apache.Tomcat.dbcp.dbcp.ConnectionFactory;
import org.Apache.Tomcat.dbcp.dbcp.DriverManagerConnectionFactory;
import org.Apache.Tomcat.dbcp.dbcp.PoolableConnectionFactory;
import org.Apache.Tomcat.dbcp.dbcp.PoolingDriver;
import org.Apache.Tomcat.dbcp.pool.impl.GenericObjectPool;

public class DatabaseConnector {
    public static String DB_URI = "jdbc:mysql://localhost/dbname";
    public static String DB_USER = "test";
    public static String DB_PASS = "password";

    // Singleton instance
    protected static DatabaseConnector _instance;

    protected String _uri;
    protected String _username;
    protected String _password;

    /**
     * Singleton, so no public constructor
     */
    protected DatabaseConnector(String uri, String username, String password) {
        _uri = uri;
        _username = username;
        _password = password;

        GenericObjectPool connectionPool = new GenericObjectPool(null);
        ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(
            _uri, _username, _password);
        PoolableConnectionFactory poolableConnectionFactory =
            new PoolableConnectionFactory(connectionFactory, connectionPool,
                                            null, null, false, true);
        PoolingDriver driver = new PoolingDriver();
        driver.registerPool("test", connectionPool);
    }

    /**
     * Returns the singleton instance
     */
    public static DatabaseConnector getInstance() {
        if (_instance == null) {
            _instance = new DatabaseConnector(DB_URI, DB_USER, DB_PASS);
        }
        return _instance;
    }

    /**
     * Returns a connection to the database
     */
    public Connection getConnection() {
        Connection con = null;
        try {
            con = DriverManager.getConnection("jdbc:Apache:commons:dbcp:test");
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
        return con;
    }
}

私のスタックトレースの開始:

Apr 5, 2011 9:49:14 PM org.Apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [Login] in context with path [/Project] 
threw exception
Java.lang.RuntimeException: Java.sql.SQLException: 
No suitable driver found for jdbc:mysql://localhost/dbname

このエラーの原因は何ですか?

88
Tamer

ドライバのjarファイルをサーバのlibフォルダに入れてみてください。 ($ CATALINA_HOME/lib)

アプリケーションがインスタンス化される前にも接続プールを設定する必要があると思います。 (少なくともJbossではどのように動作するのか)

52

このエラーが発生した理由

Java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/dbname

Mysql jdbcドライバをJavaアプリケーションに登録するのを忘れたからです。

これはあなたが書いたものです:

Connection con = null;
try {
    con = DriverManager.getConnection("jdbc:Apache:commons:dbcp:test");
} catch (SQLException e) {
    throw new RuntimeException(e);
}

これであるべきです:

Connection con = null;
try {
    //registering the jdbc driver here, your string to use 
    //here depends on what driver you are using.
    Class.forName("something.jdbc.driver.YourFubarDriver");   
    con = DriverManager.getConnection("jdbc:Apache:commons:dbcp:test");
} catch (SQLException e) {
    throw new RuntimeException(e);
}

Class.forName( "...")パラメータ内に配置する正確な文字列を見つけるには、特定のmysql jdbcドライバのマニュアルを読む必要があります。

Class.forNameはJDBC v.4では必要ありません

Java 6以降、Class.forName("something.jdbc.driver.YourFubarDriver")は最近の(JDBC v.4)ドライバを使うのであればもう必要ありません。詳しくはこちらをお読みください。 http://onjava.com/pub/a/onjava/2006/08/02/jjdbc-4-enhancements-in-Java-se-6.html

43
Eric Leschinski

念のため、$ CATALINA_HOME/libとWEB-INF/libの両方に入れた、mysql-connector-Java-5.1.26でTomcat 7を使用した場合と同じ問題がありました。しかし、接続を取得する前に、これら2つのステートメントのどちらかを使用するまでは見つかりません。

DriverManager.registerDriver(new com.mysql.jdbc.Driver ());

OR

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

私はそれから$ CATALINA_HOME/libからmysql-connector-Java-5.1.26を削除することでフォローアップしました、そして、接続はまだうまくいきます。

37
ybenjira

TomcatをEclipse以外で実行している場合、CATALINA_HOME/libにあるlibセットは選択されません。修正するには2つの方法があります。 EclipseサーバービューでTomcatサーバーをダブルクリックすると、Tomcatプラグイン設定が開きます。

  1. [Open Launch Config]> [クラスパス]タブをクリックして、mysqlコネクタ/ j jarの場所を設定します。または
  2. 「サーバーの場所」>「Tomcatインストールを使用する(Tomcatインストールを制御する)」という選択オプション
8
bjethwan

Mysqlのjdbcライブラリを$ CATALINA_HOME/libとWEB-INF/libの両方に持っていましたが、それでもこのエラーが発生しました。 Class.forName( "com.mysql.jdbc.Driver")が必要でした。それを機能させるために。

4
nondescript

私は同じ問題を抱えていました、あなたがする必要があるのはTomcatのクラスパス環境変数を定義することです、あなたはファイルを追加することでそれを行うことができます、私の場合はC:\Apache-Tomcat-7.0.30\bin\setenv.bat

set "CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\lib\mysql-connector-Java-5.1.14-bin.jar"

私の場合、コード:

Class.forName("com.mysql.jdbc.Driver").newInstance(); 
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database_name", "root", "");

正常に動作します。

3
test30

また、以下のようにコードを書くこともできます。

import Java.sql.*;
import Java.io.*;
public class InsertDatabase {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    try
    {  
        Class.forName("com.mysql.jdbc.Driver");  
        Connection con=DriverManager.getConnection(  
        "jdbc:mysql://localhost:3306/Maulik","root","root");  

        Statement stmt=con.createStatement();  
        ResultSet rs=stmt.executeQuery("select * from Employee");  
        while(rs.next())  
        System.out.println(rs.getInt(1)+"  "+rs.getString(2)+"  "+rs.getString(3));  
        con.close();
    }

    catch(Exception e)
    {
        System.out.println(e);
    }

        }  

}
3
Maulik

mavenからのアーティファクトを追加してください。

 <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-Java</artifactId>
    <version>5.1.6</version>
 </dependency>
2
Tunde Pizzle

私はEclipse 7でJava 7とともにTomcat 7を実行していて、MSSQLのsqljdbc4.jarにはjdbcドライバを使用しています。

Tomcatの外部で、スタンドアロンのJavaアプリケーションからコードを実行すると、これはうまく機能しました。

        connection = DriverManager.getConnection(conString, user, pw);

しかし、Tomcat 7の内部で同じコードを実行しようとすると、最初にドライバを登録することによってしかうまく機能しないことがわかりました。

        DriverManager.registerDriver(new com.Microsoft.sqlserver.jdbc.SQLServerDriver());
        connection = DriverManager.getConnection(conString, user, pw);
2
nick

つかいます:

try {

    Class.forName("com.mysql.jdbc.Driver").newInstance();
    System.out.println("Registro exitoso");

} catch (Exception e) {

    System.out.println(e.toString());

}

DriverManager.getConnection(..
2

私も以前に同じ問題を抱えていましたが、私はその問題を解決しました。

この例外にはさまざまな理由があります。そしてそれらの1つはあなたがあなたのlibフォルダに追加しているjarファイルが古いかもしれないということかもしれません。

最新のmysql-connector-jarバージョンを見つけてクラスパスに追加してみてください。それはあなたの問題を解決するかもしれません。私のように解決されました。

1
Ankit Pawar

私が観察したことから、この例外が発生する2つの理由があるかもしれません:(1)あなたの運転手の名前が正しくつづられていない。 (2)ドライバはJavaプロジェクトと正しく関連付けられていません。Eclipseで従うべきステップ:(1)新しいJavaプロジェクトを作成します。 (2)コネクタのJarファイルをコピーします。(3)Javaプロジェクトを右クリックして貼り付けます。 (4)Javaプロジェクトを右クリック - >プロパティ - > Javaビルドパス - >ライブラリ - > Add Jar - > urプロジェクトを選択(ドロップダウンからjarファイルを選択)してOKをクリックしてください。

1
Abhishek J

netBeansを使用している場合は、プロジェクトのプロパティで、プロジェクトのライブラリリストにMysql JDBCドライバを追加する必要があります。

1
Sérgio Silva

解決策は簡単です。

データベースコネクタに到達することができることを確認してくださいクラスパス実行中(コンパイルしていない)とき。例えば:

Java -classpath .;c:\path\to\mysql-connector-Java-5.1.39.jar YourMainClass 

また、古いバージョンのJava(JDBC 4.0より前)を使用している場合は、DriverManager.getConnectionを実行する前に次の行が必須です。

Class.forName("your.jdbc.driver.TheDriver"); // this line is not needed for modern Java
1
Pacerier

ほとんどの場合、それは2つのmysql-connector-Java-3.0.14-production-bin.jarファイルが原因で発生します。 1つはTomcatのlibフォルダにあり、もう1つはプロジェクトのクラスパスにあります。

Libフォルダーからmysql-connector-Java-3.0.14-production-bin.jarを削除してみてください。

このようにそれは私のために働いています。

1
RKP

誰もこの答えを出していないので、私もそれを付け加えたいと思います、あなたはあなたのサーバのlibフォルダにjdbcドライバファイル(私の場合はmysql-connector-Java-5.1.27-bin.jar)を追加することができます(私の場合はTomcat)。サーバーを再起動すればそれは動作するはずです。

0
Susie

他のスタックオーバーフロースレッドから:

「2番目。JMeterのクラスパスにMySQL JDBC Driver、別名Connector/Jがあることを確認します。ダウンロードしていない場合は、mysql-connector-Java-x.xx.xx-bin.jarをJMeterの/ libに解凍してドロップします。ライブラリを選択するにはJMeterの再起動が必要です。

.jarファイルがlibフォルダーに直接追加されていることを確認してください。

0

Ubuntu(Xubuntu 12.04.1)を使用して開発している場合、次のことを実行する必要があります。

を使う

Eclipse Juno(ダウンロード、ソフトウェアセンター経由ではインストールされていない)、Tomcat 7(カスタムユーザーディレクトリにダウンロード)、Eclipse 3.0の動的Webプロジェクト、ローカルホスト上のMySQL Server、ユーザーとパスワードによるテスト(必ずテストしてください)MySQLコネクタドライバ5.1.24 jar、

私は 'HAD'を繰り返します、そして私は私たちにClass.Load( "com.mysql.jdbc.Driver")ステートメントを実行するためにコネクターdriver.jarを追加します。この状況では。

重要!!:driver.jarをlibにコピーした後は、Tomcat経由でサーブレットを実行する前に、Eclipseでプロジェクトを更新してください。

私はClassLoadの有無にかかわらずBuild Pathでコネクタドライバjarファイルを追加しようとしました、しかしそれはうまくいきませんでした!

これが開発者がこの特定の状況で開発を始めるのを助けてくれることを願っています。Javaコミュニティはたくさんのドキュメントを提供していますが、それらすべてをカバーするのは難しい変数がたくさんあります。

誰かがClass.Loadがここで必要とされる理由を説明できれば(この状況で)それは有益だろうと思います。

楽しい

0
MtlMike
  1. Mysql-connector-Java-5.0.8-bin.jarを$ CATALINA_HOME/libに置きます。

  2. 接続URLのタイプミスをチェックします、例
    "jdbc:mysql:// localhost:3306/report"(ここで 'report'はデータベース名です)

  3. 必ずマシン名を使用してください(例:IPアドレス(127.0.0.1)の代わりにlocalhost)
0
Bruce

ドライバクラスをbootstrapclasspathに追加します。問題は、ブートストラップClassLoader以外のClassLoaderによってロードされたドライバが表示されないJava.sql.DriverManagerにあります。

0
arathim