Как исправить:" нет подходящего драйвера для JDBC: mysql://localhost/dbname " ошибка при использовании пулов? [дубликат]
этот вопрос уже есть ответ здесь:
Я пытаюсь создать соединение с моей базой данных, когда я ставлю тестовый код с помощью основного метода, он работает без проблем. Однако при попытке получить доступ к нему через Tomcat 7 он терпит неудачу ошибка:
No suitable driver found for jdbc:mysql://localhost/dbname.
Я использую пул. Я поставил в mysql connector (5.1.15), dbcp(1.4) и пул (1.4.5) библиотеки в WEB-INF/lib и in .классов, а также. Я использую 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
что вызывает эту ошибку?
21 ответов
Попробуйте поместить jar драйвера в папку lib сервера. ($CATALINA_HOME / lib)
Я считаю, что пул соединений должен быть настроен еще до создания экземпляра приложения. (По крайней мере, так это работает в JBoss)
причина, по которой вы получили эту ошибку:
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/dbname
это потому, что вы забыли зарегистрировать драйвер JDBC mysql с приложением 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, чтобы найти точную строку для размещения внутри класса.forName("...") параметр.
класса.forName не требуется с JDBC V. 4
начиная с Java 6, Class.forName("something.jdbc.driver.YourFubarDriver")
больше не нужно, если вы используете последние (с JDBC В. 4) водитель. Подробнее читайте здесь: http://onjava.com/pub/a/onjava/2006/08/02/jjdbc-4-enhancements-in-java-se-6.html
у меня была та же проблема с использованием 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, и соединение все еще работает.
при запуске tomcat из eclipse он не будет выбирать lib, установленный в CATALINA_HOME/lib
, есть два способа исправить это. Дважды щелкните на сервере Tomcat в представлении серверов eclipse, он откроет конфигурацию плагина tomcat, а затем либо:
- нажмите "Open Launch Config" > вкладка Classpath установите местоположение MySQL connector/j jar. или
- расположение сервера > выберите опцию, которая говорит " использовать установку Tomcat (взять под контроль установку Tomcat)"
У меня была библиотека mysql jdbc как в $CATALINA_HOME/lib, так и в WEB-INF / lib, но я получил эту ошибку . Мне нужны были занятия.forName("com по.для MySQL.интерфейс jdbc.Водителя"); чтобы заставить его работать.
у меня была та же проблема, все, что вам нужно сделать, это определить переменную среды 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", "");
работает нормально.
Я запускаю Tomcat 7 в Eclipse с Java 7 и использую драйвер jdbc для MSSQL sqljdbc4.сосуд.
при запуске кода за пределами tomcat, из автономного приложения java, это сработало просто отлично:
connection = DriverManager.getConnection(conString, user, pw);
однако, когда я попытался запустить тот же код внутри Tomcat 7, я обнаружил, что могу заставить его работать, только сначала зарегистрировав драйвер, изменив вышеизложенное на это:
DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
connection = DriverManager.getConnection(conString, user, pw);
добавить артефакт из maven.
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
использование:
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("Registro exitoso");
} catch (Exception e) {
System.out.println(e.toString());
}
DriverManager.getConnection(..
Бро, вы также можете написать код, как показано ниже:
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);
}
}
}
Если вы используете netbeans, вы должны добавить драйвер JDBC Mysql в список библиотек проекта, в свойствах вашего проекта
У меня также была та же проблема некоторое время назад, но я решил эту проблему.
для этого исключения могут быть разные причины. И один из них может заключаться в том, что банка, которую вы добавляете в свою папку lib, может быть старой.
попробуйте выяснить последняя версия mysql-connector-jar и добавьте это в свой путь к классам. Это может решить вашу проблему. Моя была решена вот так.
большую часть времени это происходит потому, что два mysql-connector-java-3.0.14-production-bin.файл jar. Один в папке lib tomcat, а другой в пути к классам проекта.
просто попробуйте удалить mysql-connector-java-3.0.14-production-bin.jar из папки lib.
таким образом, это работает для меня.
из того, что я заметил, Может быть две причины для этого исключения: (1)имя вашего водителя написано неправильно. (2)драйвер не был должным образом связан с проектом Java Шаги для выполнения в Eclipse: (1)Создайте новый проект Java. (2)скопируйте файл jar разъем (3)щелкните правой кнопкой мыши на проекте Java и вставьте его туда. (4)щелкните правой кнопкой мыши на проекте Java - > свойства - >путь сборки Java - >библиотеки - > добавить Jar - >выберите проект ur(выберите файл jar из раскрывающийся список) и нажмите ok.
решение простое.
убедитесь, что соединитель базы данных может быть достигнут вашим 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
при разработке с использованием Ubuntu (Xubuntu 12.04.1) мне "пришлось" сделать следующее:
используя
Eclipse Juno (загружено, не установлено через программный центр), Tomcat 7 (загруженный в пользовательский каталог пользователя) также добавлен как сервер в Eclipse, Динамический веб-проект с сервлетом 3.0, Сервер MySQL на localhost настроен и протестирован с помощью пользователя и пароля (обязательно проверьте) MySQL драйвер разъема 5.1.24 jar,
Я "имел", и я повторяю "имел", нам класс.Загрузить ("com.для MySQL.интерфейс jdbc.Driver") оператор вместе с добавлением драйвера соединителя.jar должен быть в папке lib веб-проекта, чтобы он работал в этой ситуации.
важно!!: после копирования драйвера.jar to the lib убедитесь, что вы обновили свой проект в Eclipse перед запуском сервлета через Tomcat.
Я попытался добавить файл jar драйвера соединителя через Путь сборки с и без ClassLoad, но это не сработало!
надеюсь, это поможет кому-нибудь начать разработка с этой конкретной ситуацией: сообщество Java предоставляет "много" документации, но есть так много переменных, что его трудно охватить все из них, и это делает вещи очень трудными для нового парня.
Я думаю, если бы кто-нибудь мог объяснить, почему класс.Нагрузка требуется здесь (в этой ситуации), это было бы полезно.
наслаждайтесь
поскольку никто не дал этого ответа, я также хотел бы добавить, что вы можете просто добавить файл драйвера jdbc (mysql-connector-java-5.1.27-bin.jar
в моем случае) в папку lib вашего сервера(Tomcat в моем случае). Перезапустите сервер и он должен работать.
поставить mysql-connector-java-5.0.8-bin.банку в $CATALINA_HOME/lib в
проверьте наличие опечатки в url-адресе соединения, например
"jdbc: mysql: / / localhost:3306 / report "("отчет" - это имя БД)- обязательно используйте имя машины(пример : localhost вместо ip-адреса (127.0.0.1))
добавьте класс драйвера в bootstrapclasspath. Проблема в java.язык SQL.DriverManager, который не видит драйверы, загруженные загрузчиками классов, отличными от загрузчика классов bootstrap.
из другого потока stackoverflow:
"во-вторых. Убедитесь, что у вас есть MySQL JDBC Driver aka Connector/J в пути к классам JMeter. Если нет-скачайте, распакуйте и отбросьте mysql-connector-java-x.xx.xx-bin.банку в папку JMeter /lib. Перезапуск JMeter потребуется, чтобы забрать библиотеку"
пожалуйста, убедитесь, что .jar-файл добавляется в папку lib.
вы можете вставить банку в путь времени выполнения jboss, как это:
C:\User\user\workspace\jboss-as-web-7.0.0.Final\standalone\deployments\MYapplicationEAR.ухо\тест.война\WEB-INF\lib ca marche 100%