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

У вас должен быть как минимум доступ для чтения к этому файлу, и, очевидно, файл должен существовать.

Другие вопросы по тегам