Java продолжает говорить, что не может найти драйвер jdbc mysql
Вот еще один вопрос о драйвере mysql в jdbc. Учитывая количество результатов поиска, которые я получил, когда гуглил, я довольно обескуражен, и ничего из того, что я нашел в них, не сработало для меня.
Ошибка:
hostname# java -cp /usr/share/java/mysql-connector.jar:/home/user JDBCTest
java.sql.SQLException: No suitable driver found for jdbc:mysql://<db ip>:3306/dbname
at java.sql.DriverManager.getConnection(DriverManager.java:596)
at java.sql.DriverManager.getConnection(DriverManager.java:215)
at JDBCTest.main(sqltest.java:14)
Код (вытащил из краткого как):
import java.sql.Connection;
import java.sql.DriverManager;
class JDBCTest {
private static final String url = "jdbc:mysql://dbipaddress:3306/dbname";
private static final String user = "username";
private static final String password = "password";
public static void main(String args[]) {
try {
Connection con = DriverManager.getConnection(url, user, password);
System.out.println("Success");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Я уверен на 90% /usr/share/java/mysql-connector-java.jar - правильный путь для класса. Это то, что я нашел как онлайн, так и используя locate.
Я попытался установить путь к классу среды в CLASSPATH=$CLASSPATH:/usr/share/java/mysql-connector-java.jar
в / etc / environment. Как видите, я тоже попробовал флаг -cp.
Я могу подключиться к серверу mysql и базе данных с учетными данными, имеющимися у меня в классе JDBCTest, используя командную строку mysql-client. Так что это не ошибка сервера db или моего пользователя / пароля.
Насколько я могу судить, мой jdbc url правильный. Это была одна из наиболее распространенных проблем, которые я обнаружил при поиске...
Я использую Ubuntu 12.04 64bit на своих серверах.
libmysql-java установлен. Как есть, openjdk-7-jre-headless.
Я запускаю это полностью за пределами Tomcat, поэтому все ответы, в которых говорится о копировании драйвера в каталог Tomcat, не должны применяться.
Итак, я в тупике. Я думаю, что использование флага -cp заставит его работать. Что-то в моей установке Java отсутствует? Что-то, что осталось от openjdk-7-jre-headless?
Как это исправить?
Примечание. Этот класс является всего лишь быстрым тестом, помогающим мне определить, почему более крупное (проприетарное) приложение не подключается к моей базе данных. Чем больше приложение выдает ту же ошибку. Я надеюсь, что исправление этого небольшого класса исправит более крупное приложение.
2 ответа
Возможно, вы используете версию драйвера MySQL JDBC, которая не совместима с JDBC 4, поэтому она не загружается автоматически DriverManager
, В этом случае вам нужно явно загрузить его, используя:
Class.forName("com.mysql.jdbc.Driver");
Другой вариант - использовать версию библиотеки, которая совместима с JDBC 4 и будет автоматически загружена.
Попробуйте добавить следующее в первую строку вашего основного метода:
Class.forName("com.mysql.jdbc.Driver");
Если он выдает исключение, то JVM не может получить доступ /usr/share/java/mysql-connector.jar
, Если это так, то проверьте права доступа к файлу, используя:
ls -lah /usr/share/java/mysql-connector.jar
У вас должен быть как минимум доступ для чтения к этому файлу, и, очевидно, файл должен существовать.