Java.sql.SQLException: Не найдено подходящего драйвера для jdbc: mysql://localhost: 3306/dbname
У меня есть эта Java-программа: MySQLConnectExample.java
import java.sql.*;
import java.util.Properties;
public class MySQLConnectExample {
public static void main(String[] args) {
Connection conn1 = null;
Connection conn2 = null;
Connection conn3 = null;
try {
String url1 = "jdbc:mysql://localhost:3306/aavikme";
String user = "root";
String password = "aa";
conn1 = DriverManager.getConnection(url1, user, password);
if (conn1 != null)
System.out.println("Connected to the database test1");
String url2 = "jdbc:mysql://localhost:3306/aavikme?user=root&password=aa";
conn2 = DriverManager.getConnection(url2);
if (conn2 != null) {
System.out.println("Connected to the database test2");
}
String url3 = "jdbc:mysql://localhost:3306/aavikme";
Properties info = new Properties();
info.put("user", "root");
info.put("password", "aa");
conn3 = DriverManager.getConnection(url3, info);
if (conn3 != null) {
System.out.println("Connected to the database test3");
}
} catch (SQLException ex) {
System.out.println("An error occurred. Maybe user/password is invalid");
ex.printStackTrace();
}
}
}
Я скомпилирую его следующим образом:
E:\java mysql code driver>javac MySQLConnectExample.java
E:\java mysql code driver>java -cp mysql-connector-java-3.0.11-stable-bin.jar;.
MySQLConnectExample
Я получаю эту ошибку:
An error occurred. Maybe user/password is invalid
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/
aavikme
at java.sql.DriverManager.getConnection(DriverManager.java:596)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
at MySQLConnectExample.main(MySQLConnectExample.java:20)
Что я делаю неправильно?
Ответы
Ответ 1
Убедитесь, что вы запускаете это сначала:
Class.forName("com.mysql.jdbc.Driver");
Это заставляет драйвер регистрироваться, так что Java знает, как обрабатывать эти строки подключения к базе данных.
Для получения дополнительной информации см. ссылка на MySQL Connector.
Ответ 2
Вам нужно загрузить jdbc driver
. Рассмотрим ниже код.
try {
Class.forName("com.mysql.jdbc.Driver");
// connect way #1
String url1 = "jdbc:mysql://localhost:3306/aavikme";
String user = "root";
String password = "aa";
conn1 = DriverManager.getConnection(url1, user, password);
if (conn1 != null) {
System.out.println("Connected to the database test1");
}
// connect way #2
String url2 = "jdbc:mysql://localhost:3306/aavikme?user=root&password=aa";
conn2 = DriverManager.getConnection(url2);
if (conn2 != null) {
System.out.println("Connected to the database test2");
}
// connect way #3
String url3 = "jdbc:mysql://localhost:3306/aavikme";
Properties info = new Properties();
info.put("user", "root");
info.put("password", "aa");
conn3 = DriverManager.getConnection(url3, info);
if (conn3 != null) {
System.out.println("Connected to the database test3");
}
} catch (SQLException ex) {
System.out.println("An error occurred. Maybe user/password is invalid");
ex.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Ответ 3
Пример извлечения данных из таблицы, содержащей столбцы column1, column2, column3 column4, cloumn1 и 2, содержит значения int и столбцы 3 и 4, удерживая varchar(10)
import java.sql.*;
// need to import this as the STEP 1. Has the classes that you mentioned
public class JDBCexample {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://LocalHost:3306/databaseNameHere";
// DON'T PUT ANY SPACES IN BETWEEN and give the name of the database (case insensitive)
// database credentials
static final String USER = "root";
// usually when you install MySQL, it logs in as root
static final String PASS = "";
// and the default password is blank
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
// registering the driver__STEP 2
Class.forName("com.mysql.jdbc.Driver");
// returns a Class object of com.mysql.jdbc.Driver
// (forName(""); initializes the class passed to it as String) i.e initializing the
// "suitable" driver
System.out.println("connecting to the database");
// opening a connection__STEP 3
conn = DriverManager.getConnection(DB_URL, USER, PASS);
// executing a query__STEP 4
System.out.println("creating a statement..");
stmt = conn.createStatement();
// creating an object to create statements in SQL
String sql;
sql = "SELECT column1, cloumn2, column3, column4 from jdbcTest;";
// this is what you would have typed in CLI for MySQL
ResultSet rs = stmt.executeQuery(sql);
// executing the query__STEP 5 (and retrieving the results in an object of ResultSet)
// extracting data from result set
while(rs.next()){
// retrieve by column name
int value1 = rs.getInt("column1");
int value2 = rs.getInt("column2");
String value3 = rs.getString("column3");
String value4 = rs.getString("columnm4");
// displaying values:
System.out.println("column1 "+ value1);
System.out.println("column2 "+ value2);
System.out.println("column3 "+ value3);
System.out.println("column4 "+ value4);
}
// cleaning up__STEP 6
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
// handle sql exception
e.printStackTrace();
}catch (Exception e) {
// TODO: handle exception for class.forName
e.printStackTrace();
}finally{
//closing the resources..STEP 7
try {
if (stmt != null)
stmt.close();
} catch (SQLException e2) {
e2.printStackTrace();
}try {
if (conn != null) {
conn.close();
}
} catch (SQLException e2) {
e2.printStackTrace();
}
}
System.out.println("good bye");
}
}
Ответ 4
Возможно, вы не скопировали jar файл MySQL connector/J
в папку lib, а затем этот файл должен находиться в пути к классам.
Если вы этого еще не сделали, сообщите мне, я объясню ответ
Ответ 5
В коде отсутствует код Class.forName("com.mysql.jdbc.Driver");
Это то, чего вам не хватает, чтобы все работало.
Ответ 6
У меня была такая же проблема, мой код ниже:
private Connection conn = DriverManager.getConnection(Constant.MYSQL_URL, Constant.MYSQL_USER, Constant.MYSQL_PASSWORD);
private Statement stmt = conn.createStatement();
Я не загрузил класс драйвера, но я могу работать в локальном режиме, я могу запросить результат из MySQL, однако я не работаю, когда я его развертываю в Tomcat, и вызывает следующие ошибки:
No suitable driver found for jdbc:mysql://172.16.41.54:3306/eduCloud
поэтому я загружаю класс драйвера, как показано ниже, когда я вижу ответ на этот вопрос:
Class.forName("com.mysql.jdbc.Driver");
Теперь он работает!
Я не знаю, почему это хорошо работает на местном уровне, мне нужна ваша помощь, спасибо вам большое!
Ответ 7
Все ответы здесь используют строку Class.forName("my.vandor.Driver");
для загрузки драйвера.
В качестве (лучшей) альтернативы вы можете использовать вспомогательный класс DriverManager
, который предоставляет вам несколько методов для обработки ваших драйверов JDBC.
Возможно, вы захотите
- Используйте
DriverManager.registerDriver(driverObject);
, чтобы зарегистрировать ваш драйвер в списке драйверов.
Регистрирует данный драйвер с помощью DriverManager. Недавно загруженный класс драйвера должен вызвать метод registerDriver, чтобы он сам узнал DriverManager. Если драйвер в настоящий момент зарегистрирован, никаких действий не предпринимается
- Используйте
DriverManager.deregisterDriver(driverObject);
, чтобы удалить его.
Удаляет указанный драйвер из списка зарегистрированных драйверов DriverManager.
Пример:
Driver driver = new oracle.jdbc.OracleDriver();
DriverManager.registerDriver(driver);
Connection conn = DriverManager.getConnection(url, user, password);
// ...
// and when you don't need anything else from the driver
DriverManager.deregisterDriver(driver);
или еще лучше, используйте DataSource
Ответ 8
попробуйте это
String url = "jdbc:mysql://localhost:3306/<dbname>";
String user = "<username>";
String password = "<password>";
conn = DriverManager.getConnection(url, user, password);
Ответ 9
У меня была аналогичная проблема, просто проверьте порт, на котором запущен ваш сервер Mysql, который решит проблему.
Например, мой код:
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:8080/bddventas","root","");
меняет строку на
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bddventas","root","");
и voila!!, эта работа, потому что мой сервер работал на этом порту
Надеемся на эту помощь