java.sql.SQLException: Не найден подходящий драйвер для jdbc:mysql://localhost:3306/dbname
Проблема с подключением к базе данных в Java: "java.sql.SQLException: No suitable driver found"
У меня есть программа на 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)
Что я делаю не так?
Пожалуйста, помогите мне разобраться с этой ошибкой и подключением к базе данных MySQL.
5 ответ(ов)
Чтобы подключиться к базе данных MySQL, вам необходимо загрузить JDBC-драйвер. Рассмотрим приведенный ниже код:
try {
Class.forName("com.mysql.jdbc.Driver");
// способ подключения #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("Подключено к базе данных test1");
}
// способ подключения #2
String url2 = "jdbc:mysql://localhost:3306/aavikme?user=root&password=aa";
conn2 = DriverManager.getConnection(url2);
if (conn2 != null) {
System.out.println("Подключено к базе данных test2");
}
// способ подключения #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("Подключено к базе данных test3");
}
} catch (SQLException ex) {
System.out.println("Произошла ошибка. Возможно, неверный логин/пароль");
ex.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Авто-сгенерированный блок обработки исключений
e.printStackTrace();
}
В этом коде сначала производится попытка загрузить драйвер с помощью Class.forName
. Затем представлено три разных способа подключения к базе данных: с указанием параметров напрямую, через строку подключения и с использованием объекта Properties
. В случае возникновения ошибки, связанной с SQL или загрузкой класса, она обрабатывается и выводится соответствующее сообщение. Не забудьте, что вам также нужно убедиться, что JDBC-драйвер для MySQL добавлен в ваш проект, иначе будет выброшено исключение ClassNotFoundException
.
У меня была такая же проблема, и вот мой код:
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");
Теперь всё работает! Я не понимаю, почему локально всё было в порядке, и мне нужна ваша помощь. Большое спасибо!
Чтобы получить данные из таблицы с колонками column1
, column2
, column3
и column4
, где column1
и column2
имеют целочисленные значения, а column3
и column4
имеют тип varchar(10)
, вы можете использовать следующий пример кода на Java с использованием JDBC:
import java.sql.*;
public class JDBCexample {
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://LocalHost:3306/databaseNameHere";
// Учетные данные базы данных
static final String USER = "root";
static final String PASS = "";
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
// Регистрация драйвера
Class.forName(JDBC_DRIVER);
System.out.println("Подключение к базе данных...");
// Открытие соединения
conn = DriverManager.getConnection(DB_URL, USER, PASS);
System.out.println("Создание запроса...");
// Создание объекта для исполнения SQL запросов
stmt = conn.createStatement();
String sql = "SELECT column1, column2, column3, column4 FROM jdbcTest;";
// Исполнение запроса и получение результата
ResultSet rs = stmt.executeQuery(sql);
// Извлечение данных из результата
while(rs.next()){
int value1 = rs.getInt("column1");
int value2 = rs.getInt("column2");
String value3 = rs.getString("column3");
String value4 = rs.getString("column4");
// Вывод значений
System.out.println("column1: " + value1);
System.out.println("column2: " + value2);
System.out.println("column3: " + value3);
System.out.println("column4: " + value4);
}
// Закрытие ресурсов
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
// Обработка исключений базы данных
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
// Закрытие ресурсов
try {
if (stmt != null) stmt.close();
} catch (SQLException se) {
se.printStackTrace();
}
try {
if (conn != null) conn.close();
} catch (SQLException se) {
se.printStackTrace();
}
}
System.out.println("До свидания");
}
}
В этом коде:
- Вы подключаетесь к базе данных, используя JDBC.
- Регистрация драйвера JDBC происходит с помощью
Class.forName()
. - Используется
DriverManager.getConnection()
для установления соединения с базой данных. - Создается SQL запрос, который выбирает данные из таблицы
jdbcTest
. - Результаты запроса извлекаются с помощью
ResultSet
, и значения печатаются в консоль. - Закрываются все ресурсы после завершения работы чтобы избежать утечки памяти.
Убедитесь, что указанные вами имя базы данных, пользователь и пароль правильные.
Вы, возможно, не скопировали файл MySQL connector/J
jar в папку lib, и этот файл должен присутствовать в classpath.
Если вы этого не сделали, дайте знать, и я смогу подробнее объяснить.
В вашем коде отсутствует строка Class.forName("com.mysql.jdbc.Driver");
. Это именно то, что вам нужно добавить, чтобы все заработало.
INNER JOIN ON vs WHERE: что выбрать?
Создание нового пользователя в MySQL с полным доступом к одной базе данных
MySQL INTO OUTFILE: Как переопределить существующий файл?
Самый простой способ преобразования Blob в массив байтов
ResultSet: Извлечение значений столбцов по индексу или по метке?