Как исправить: "Не найдено подходящего драйвера для ошибки jdbc: mysql://localhost/dbname" при использовании пулов?

Я пытаюсь создать соединение с моей базой данных, когда я ставил тест своего кода с использованием основного метода, он работает без проблем. Однако при попытке получить к нему доступ через 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

Что вызывает эту ошибку?

Ответы

Ответ 1

Попробуйте помещать jar драйвера в папку lib сервера. ($ CATALINA_HOME/lib)

Я считаю, что пул соединений должен быть настроен еще до того, как приложение будет создано. (По крайней мере, как это работает в Jboss)

Ответ 2

Причина, по которой вы получили эту ошибку:

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);
}

Вам нужно будет прочитать руководство по вашему конкретному драйверу mysql jdbc, чтобы найти точную строку для размещения внутри параметра Class.forName( "..." ).

Класс .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

Ответ 3

У меня была та же проблема, что и Tomcat7 с mysql-connector-java-5.1.26, которую я на всякий случай вставлял в мои $CATALINA_HOME/lib и WEB-INF/lib. Но он не нашел бы его, пока я не воспользуюсь ни одним из этих двух утверждений, прежде чем получить соединение:

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

ИЛИ

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

Затем я продолжил удаление mysql-connector-java-5.1.26 из $CATALINA_HOME/lib, и соединение все еще работает.

Ответ 4

При запуске tomcat из eclipse он не будет выбирать набор lib в CATALINA_HOME/lib, есть два способа его исправить. Дважды щелкните на сервере Tomcat на экране серверов eclipse, он откроет конфигурацию плагина tomcat, затем либо:

  • Перейдите на вкладку "Открыть Launch Config" > вкладка "Classpath", чтобы указать расположение jq-контейнера mysql. или
  • Расположение серверa > выберите опцию, которая гласит: "Используйте установку Tomcat (возьмите под контроль установку Tomcat)"

Ответ 5

У меня была библиотека mysql jdbc как в $CATALINA_HOME/lib, так и в WEB-INF/lib, но я получил эту ошибку. Мне нужен Class.forName( "com.mysql.jdbc.Driver" ); чтобы он работал.

Ответ 6

У меня была та же проблема, все, что вам нужно сделать, это определить переменную среды classpath для 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", "");

работает отлично.

Ответ 7

Я запускаю Tomcat 7 в Eclipse с Java 7 и используя драйвер jdbc для MSSQL sqljdbc4.jar.

При запуске кода за пределами tomcat из автономного java-приложения это сработало просто:

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

Однако, когда я пытался запустить тот же код внутри Tomcat 7, я обнаружил, что я мог бы заставить его работать, сначала зарегистрировав драйвер, изменив приведенное выше:

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

Ответ 8

Использование:

try {

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

} catch (Exception e) {

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

}

DriverManager.getConnection(..

Ответ 9

Bro, вы также можете написать код, как показано ниже:

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);
    }

        }  

}

Ответ 10

Если вы используете netbeans, вы должны добавить драйвер Mysql JDBC в список библиотек проекта, в свойствах вашего проекта

Ответ 11

У меня также была такая же проблема некоторое время назад, но я решил эту проблему.

Для этого исключения могут быть разные причины. И одним из них может быть, что банка, которую вы добавляете в свою папку lib, может быть старой.

Попробуйте найти последнюю версию mysql-connector-jar и добавьте ее в свой путь к классам. Это может решить вашу проблему. Шахта была решена так.

Ответ 12

В большинстве случаев это происходит из-за двух файлов mysql-connector-java-3.0.14-production-bin.jar. Один в папке lib tomcat и другой в classpath проекта.

Просто попробуйте удалить mysql-connector-java-3.0.14-production-bin.jar из папки lib.

Таким образом, он работает для меня.

Ответ 13

Из того, что я заметил, может быть две причины для этого исключения: (1) Неправильно написано имя вашего драйвера. (2) Драйвер не был должным образом связан с Java-проектом  Шаги в Eclipse:  (1) Создайте новый Java-проект.  (2) копия Соединительный файл Jar  (3) Щелкните правой кнопкой мыши проект Java и вставьте его туда.  (4) Щелкните правой кнопкой мыши на проекте Java → Свойства → Путь сборки Java → libraries- > Добавить Jar → выберите проект ур (выберите файл jar из раскрывающегося списка) и нажмите "ОК".

Ответ 14

Решение прост.

Убедитесь, что соединитель базы данных может быть достигнут с помощью classpath, когда работает (не компилирует) программу, например:

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

Кроме того, если вы используете старую версию Java (pre JDBC 4.0), перед выполнением DriverManager.getConnection требуется эта строка:

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

Ответ 15

добавить артефакт из maven.

 <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.6</version>
 </dependency>

Ответ 16

При разработке с использованием Ubuntu (Xubuntu 12.04.1) я 'HAD' выполните следующие действия:

Использование

Eclipse Juno (загружен, не установлен через программный центр), Tomcat 7 (загружается в пользовательский каталог пользователя), также добавленный в качестве сервера в Eclipse, Динамический веб-проект с сервлет 3.0, MySQL Server на localhost настроен и протестирован с помощью пользователя и пароля (обязательно проверьте) Драйвер соединителя MySQL 5.1.24 jar,

I 'HAD', и я повторяю "HAD", к нам оператор Class.Load( "com.mysql.jdbc.Driver" ), а также добавление соединителя driver.jar в папку веб-проекта lib для он должен работать в этой ситуации.

ВАЖНО!!: после того, как вы скопируете файл driver.jar в lib, убедитесь, что вы обновили проект в Eclipse до запуска сервлета через Tomcat.

Я попытался добавить файл jar файла драйвера соединителя через путь сборки с ClassLoad и без него, но это не сработало!

Надеюсь, это поможет любому, кто начнет разработку с этой конкретной ситуации: сообщество Java предоставляет "LOT" документации, но есть так много переменных, которые сложно охватить для всех, и это сильно осложняет работу нового парня.

Я думаю, если бы кто-нибудь мог объяснить, почему Class.Load требуется здесь (в этой ситуации), это было бы полезно.

Enjoy

Ответ 17

Поскольку никто не ответил на этот вопрос, я также хотел бы добавить, что вы можете просто добавить файл драйвера jdbc (mysql-connector-java-5.1.27-bin.jar в моем случае) в папку lib вашего сервера (Tomcat в моем случае). Перезагрузите сервер, и он должен работать.

Ответ 18

  • Поместите mysql-connector-java-5.0.8-bin.jar в $CATALINA_HOME/lib

  • Проверьте наличие опечатки в URL-адресе подключения, пример
    "jdbc: mysql://localhost: 3306/report" ( "report" здесь - имя db)

  • Обязательно используйте имя машины (пример: localhost вместо ip-адреса (127.0.0.1))

Ответ 19

Добавить класс драйвера в путь bootstrapclasspath. Проблема заключается в java.sql.DriverManager, который не видит драйверы, загруженные ClassLoaders, кроме bootstrap ClassLoader.

Ответ 20

Из другого потока stackoverflow:

"Во-вторых, убедитесь, что у вас есть драйвер JDBC MySQL aka Connector/J в пути JMeter. Если вы его не загрузили, распакуйте и опустите mysql-connector-java-x.xx.xx-bin.jar в JMeter/lib. Перезагрузите JMeter, чтобы выбрать библиотеку"

Пожалуйста, убедитесь, что .jar файл добавлен непосредственно в папку lib.

Ответ 21

Вы можете закрепить банку на пути времени выполнения jboss следующим образом:

C:\User\пользователь\рабочее пространство \jboss-as-web-7.0.0.Final\\ автономных развертываний \MYapplicationEAR.ear\test.war\WEB-INF\Lib ca marche 100%