Как Вы соединяетесь с базой данных 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
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();
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);
Вот пошаговое объяснение того, как установить MySQL и JDBC и как его использовать:
Загрузите и установите сервер MySQL . Просто делай это как обычно. Запомните номер порта всякий раз, когда вы его меняли. По умолчанию это 3306
.
Загрузите драйвер 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 и клонах следует использовать :
.
Создайте базу данных в MySQL . Создадим базу данных javabase
. Вы, конечно, хотите мирового господства, поэтому давайте также будем использовать UTF-8.
СОЗДАТЬ БАЗУ ДАННЫХ javabase НАБОР СИМВОЛОВ ПО УМОЛЧАНИЮ utf8 COLLATE utf8_unicode_ci;
Создайте пользователя для Java и предоставьте ему доступ . Просто потому, что использование root
- плохая практика.
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'java' @ 'localhost' ИДЕНТИФИЦИРОВАННЫЙ 'паролем';
ПРЕДОСТАВИТЬ ВСЕ НА javabase. * TO 'java' @ 'localhost' ИДЕНТИФИЦИРОВАНО 'паролем';
Да, здесь java
- это имя пользователя, а пароль
- это пароль.
Определите 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
Протестируйте соединение с 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 исключение связи:
сбой канала связи
, то это означает, что БД вообще недоступна. Это может иметь одну или несколько из следующих причин:
Чтобы решить тот или иной вопрос, следуйте следующим советам:
ping
. my.cnf
базы данных MySQL. - skip-network
. , наконец,
. Обратите внимание, что закрытие соединения
крайне важно . Если вы не закрываете соединения и продолжаете получать их много за короткое время, то в базе данных могут закончиться соединения, и ваше приложение может выйти из строя. Всегда запрашивайте соединение
в операторе try-with-resources
. Или, если вы еще не используете Java 7, явно закройте его в finally
блока try-finally
. Закрытие в finally
просто для того, чтобы гарантировать, что он также будет закрыт в случае исключения. Это также относится к заявлению
, PreparedStatement
и ResultSet
.
Вот и все, что касается проблем с подключением. Вы можете найти здесь более подробное руководство, как загружать и сохранять полноценные объекты модели Java в базе данных с помощью базового класса DAO.
Использование одноэлементного шаблона для соединения с БД - плохой подход. См. Среди других вопросов: http://stackoverflow.com/q/9428573/ . Это стартовая ошибка №1.
Вот самый минимум, необходимый для получения данных из базы данных 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();
Добавьте обработку исключений, конфигурацию и т.д. по вкусу.