Java подключения к базе данных MySQL

Как Вы соединяетесь с базой данных MySQL в Java?

Когда я пробую, я добираюсь

java.sql.SQLException: No suitable driver found for jdbc:mysql://database/table
    at java.sql.DriverManager.getConnection(DriverManager.java:689)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)

Или

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

Или

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
308
задан Mark Rotteveel 22 September 2018 в 21:23
поделиться

4 ответа

DriverManager - довольно старый способ работы. Лучше всего получить DataSource , либо найдя тот, что контейнер вашего сервера приложений уже настроен для вас:

Context context = new InitialContext();
DataSource dataSource = (DataSource) context.lookup("java:comp/env/jdbc/myDB");

, либо создав его и настроив напрямую из драйвера вашей базы данных:

MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUser("scott");
dataSource.setPassword("tiger");
dataSource.setServerName("myDBHost.example.org");

, а затем получите соединения от него, как указано выше:

Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ID FROM USERS");
...
rs.close();
stmt.close();
conn.close();
199
ответ дан 23 November 2019 в 01:14
поделиться
String url = "jdbc:mysql://127.0.0.1:3306/yourdatabase";
String user = "username";
String password = "password";

// Load the Connector/J driver
Class.forName("com.mysql.jdbc.Driver").newInstance();
// Establish connection to MySQL
Connection conn = DriverManager.getConnection(url, user, password);
23
ответ дан 23 November 2019 в 01:14
поделиться

Вот пошаговое объяснение того, как установить MySQL и JDBC и как его использовать:

  1. Загрузите и установите сервер MySQL . Просто делай это как обычно. Запомните номер порта всякий раз, когда вы его меняли. По умолчанию это 3306 .

  2. Загрузите драйвер JDBC и введите путь к классам , извлеките файл ZIP и поместите содержащий его файл JAR в путь к классам. Драйвер JDBC, зависящий от производителя, представляет собой конкретную реализацию JDBC API ( руководство здесь ).

    Если вы используете IDE, например Eclipse или Netbeans, вы можете добавить его в путь к классам, добавив файл JAR как Библиотека в Путь сборки в свойствах проекта.

    Если вы делаете это «обычным способом» в командной консоли, тогда вам нужно указать путь к файлу JAR в аргументе -cp или -classpath , когда выполнение вашего Java-приложения.

     java -cp.; / Путь / к / mysql-connector.jar com.example.YourClass 

    . нужен только для добавления текущего каталога в путь к классам, чтобы он мог найти com.example.YourClass и ; - путь к классам разделитель, как в Windows. В Unix и клонах следует использовать : .

  3. Создайте базу данных в MySQL . Создадим базу данных javabase . Вы, конечно, хотите мирового господства, поэтому давайте также будем использовать UTF-8.

     СОЗДАТЬ БАЗУ ДАННЫХ javabase НАБОР СИМВОЛОВ ПО УМОЛЧАНИЮ utf8 COLLATE utf8_unicode_ci; 
     
  4. Создайте пользователя для Java и предоставьте ему доступ . Просто потому, что использование root - плохая практика.

     СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'java' @ 'localhost' ИДЕНТИФИЦИРОВАННЫЙ 'паролем'; 
    ПРЕДОСТАВИТЬ ВСЕ НА javabase. * TO 'java' @ 'localhost' ИДЕНТИФИЦИРОВАНО 'паролем'; 
     

    Да, здесь java - это имя пользователя, а пароль - это пароль.

  5. Определите URL-адрес JDBC . Чтобы подключить базу данных MySQL с помощью Java, вам потребуется URL-адрес JDBC со следующим синтаксисом:

     jdbc: mysql: // имя хоста: порт / имя базы данных 
    • имя хоста : имя хоста, на котором установлен сервер MySQL. Если он установлен на том же компьютере, на котором вы запускаете код Java, вы можете просто использовать localhost . Это также может быть IP-адрес, например 127.0.0.1 . Если вы столкнулись с проблемами подключения и решили использовать 127.0.0.1 вместо localhost , значит, у вас проблема в конфигурации вашей сети / DNS / хостов.

    • порт : порт TCP / IP, на котором сервер MySQL слушает. По умолчанию это 3306 .

    • имя базы данных : имя базы данных, к которой вы хотите подключиться. Это javabase .

    Таким образом, конечный URL-адрес должен выглядеть так:

     jdbc: mysql: // localhost: 3306 / javabase 
  6. Протестируйте соединение с MySQL, используя Java . Создайте простой класс Java с методом main () для проверки соединения.

     String url = "jdbc: mysql: // localhost: 3306 / javabase"; 
    String username = "java"; 
    String password = "password"; 
     { {1}} System.out.println ("Подключение к базе данных ..."); 
     
    try (Connection connection = DriverManager.getConnection (url, username, password)) {{{1} } System.out.println ("База данных подключена!"); 
    } catch (SQLException e) {
    throw new IllegalStateException ("Невозможно подключиться к базе данных!", E); {{1} }} 
     

    Если вы получили SQLException: Нет подходящего драйвера , это означает, что либо драйвер JDBC вообще не загружался автоматически, либо URL-адрес JDBC неверен (т. Е. не распознается ни одним из загруженных драйверов). Обычно драйвер JDBC 4.0 должен загружаться автоматически, когда вы просто помещаете его в путь к классам во время выполнения. Чтобы исключить одно или другое, вы всегда можете загрузить его вручную, как показано ниже:

     System.out.println ("Загрузка драйвера ..."); 
     
    попробуйте {
    Class.forName ("com.mysql.jdbc.Driver"); 
    System.out.println ("Драйвер загружен!"); 
    } catch (ClassNotFoundException e) {
    throw new IllegalStateException («Не удается найти драйвер в пути к классам!», e); 
    } 
     

    Обратите внимание, что вызов newInstance () не Здесь нужен . Это просто исправить старый и глючный org.gjt.mm.mysql.Driver . Расшифровка здесь . Если эта строка вызывает исключение ClassNotFoundException , то файл JAR, содержащий класс драйвера JDBC, просто не помещается в путь к классам.

    Обратите внимание, что вам не нужно загружать драйвер каждый раз перед подключением . Достаточно одного раза при запуске приложения.

    Если вы получили SQLException: соединение отклонено или время ожидания соединения истекло или специфичное для MySQL исключение связи: сбой канала связи , то это означает, что БД вообще недоступна. Это может иметь одну или несколько из следующих причин:

    1. IP-адрес или имя хоста в URL-адресе JDBC неверны.
    2. Имя хоста в URL-адресе JDBC не распознается локальным DNS-сервером.
    3. Номер порта отсутствует или неверен в URL-адресе JDBC.
    4. Сервер БД не работает.
    5. Сервер БД не принимает соединения TCP / IP.
    6. К серверу БД закончились соединения.
    7. Что-то среднее между Java и БД блокирует соединения, например брандмауэр или прокси.

    Чтобы решить тот или иной вопрос, следуйте следующим советам:

    1. Проверьте и протестируйте их с помощью ping .
    2. Обновите DNS или используйте вместо него IP-адрес в URL-адресе JDBC.
    3. Проверьте это на основе my.cnf базы данных MySQL.
    4. Запустить БД.
    5. Убедитесь, что mysqld запущен без параметра - skip-network .
    6. Перезапустите БД и исправьте свой код соответствующим образом, чтобы он закрыл соединения в , наконец, .
    7. Отключите брандмауэр и / или настройте брандмауэр / прокси, чтобы разрешить / переадресовать порт.

    Обратите внимание, что закрытие соединения крайне важно . Если вы не закрываете соединения и продолжаете получать их много за короткое время, то в базе данных могут закончиться соединения, и ваше приложение может выйти из строя. Всегда запрашивайте соединение в операторе try-with-resources . Или, если вы еще не используете Java 7, явно закройте его в finally блока try-finally . Закрытие в finally просто для того, чтобы гарантировать, что он также будет закрыт в случае исключения. Это также относится к заявлению , PreparedStatement и ResultSet .

Вот и все, что касается проблем с подключением. Вы можете найти здесь более подробное руководство, как загружать и сохранять полноценные объекты модели Java в базе данных с помощью базового класса DAO.


Использование одноэлементного шаблона для соединения с БД - плохой подход. См. Среди других вопросов: http://stackoverflow.com/q/9428573/ . Это стартовая ошибка №1.

460
ответ дан 23 November 2019 в 01:14
поделиться

Вот самый минимум, необходимый для получения данных из базы данных MySQL:

Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection
   ("jdbc:mysql://localhost:3306/foo", "root", "password");

Statement stmt = conn.createStatement();
stmt.execute("SELECT * FROM `FOO.BAR`");
stmt.close();
conn.close();

Добавьте обработку исключений, конфигурацию и т.д. по вкусу.

13
ответ дан 23 November 2019 в 01:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: