106

データベースへの接続を作成しようとしています。メイン メソッドを使用してコードをテストすると、シームレスに動作します。ただし、Tomcat 7 からアクセスしようとすると、次のエラーで失敗します。

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

プーリングを使用しています。mysql コネクタ (5.1.15)、dbcp (1.4)、およびプール (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

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

4

21 に答える 21

67

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

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

于 2011-04-05T18:57:41.720 に答える
48

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

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 ドライバーのマニュアルを読む必要があります。

JDBC v.4 では Class.forName は不要

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を参照してください。

于 2011-09-14T17:43:13.697 に答える
8

Tomcat を Eclipse から実行するとCATALINA_HOME/lib、 に設定されたライブラリが選択されません。これを修正するには 2 つの方法があります。Eclipse サーバー ビューで Tomcat サーバーをダブルクリックすると、Tomcat プラグイン構成が開きます。次に、次のいずれかを行います。

  1. [Open Launch Config] > [Classpath] タブをクリックして、mysql コネクタ/j jar の場所を設定します。また
  2. サーバーの場所>「Tomcatインストールを使用する(Tomcatインストールを制御する)」というオプションを選択します
于 2014-01-04T20:02:23.717 に答える
3

私は同じ問題を抱えていました。あなたがする必要があるのはto​​mcatのクラスパス環境変数を定義することだけです。私の場合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", "");

正常に動作します。

于 2012-09-19T14:04:27.747 に答える
3

使用する:

try {

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

} catch (Exception e) {

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

}

DriverManager.getConnection(..
于 2016-12-26T23:39:17.463 に答える
3

I also had the same problem some time before, but I solved that issue.

There may be different reasons for this exception. And one of them may be that the jar you are adding to your lib folder may be old.

Try to find out the latest mysql-connector-jar version and add that to your classpath. It may solve your issue. Mine was solved like that.

于 2013-01-10T07:11:09.957 に答える
1

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

于 2012-07-05T19:10:37.930 に答える
1

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

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

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

于 2014-06-03T12:35:38.533 に答える
1

From what i have observed there might be two reasons for this Exception to occur: (1)Your Driver name is not spelled Correctly. (2)Driver hasn't been Associated Properly with the Java Project Steps to follow in Eclipse: (1)Create a new Java Project. (2)copy The connector Jar file (3)Right Click on the Java project and paste it there. (4)Right click on the Java project -> Properties ->Java Build Path - >libraries-> Add Jar ->choose ur project(select the jar file from dropdown) and click ok.

于 2015-02-10T01:14:48.210 に答える
0

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

使用する

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

私は「HAD」を繰り返し、「HAD」を繰り返して、Class.Load( "com.mysql.jdbc.Driver")ステートメントをWebプロジェクトのlibフォルダーに追加して機能させます。この状況では。

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

ClassLoadの有無にかかわらず、ビルドパスを介してコネクタドライバーのjarファイルを追加しようとしましたが、機能しませんでした。

これがこの特定の状況で開発を開始する人に役立つことを願っています。Javaコミュニティは「たくさんの」ドキュメントを提供しますが、それらすべてをカバーするのが難しい変数が非常に多く、新しい人にとっては非常に困難です。

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

楽しみ

于 2013-03-14T19:06:12.353 に答える
0
  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)
于 2015-08-15T12:08:28.007 に答える
-2

次のように、jboss の実行時のパスに jar を貼り付けることができます。

C:\User\user\workspace\jboss-as-web-7.0.0.Final\standalone\deployments\MYapplicationEAR.ear\test.war\WEB-INF\lib ca marche 100%

于 2015-06-07T16:30:36.453 に答える