Вначале создадим на сервере MySQL пустую базу данных, которую назовем store и с которой мы будет работать в приложении на Java. Для создания базы данных применяется выражение SQL:
CREATE DATABASE store;
Его можно выполнить либо из консольного клиента MySQL Command Line Client, либо из графического клиента MySQL Workbench, которые устанавливются вместе с сервером MySQL. Подробнее про создание базы данных можно прочитать в статье Создание и удаление базы данных.
Для подключения к базе данных необходимо создать объект java.sql.Connection. Для его создаия применяется метод:
Connection DriverManager.getConnection(url, username, password)
Метод DriverManager.getConnection
в качестве параметров принимает адрес источника данных, логин и пароль. В качестве логина и пароля передаются
логин и пароль от сервера MySQL. Адрес локальной базы данных MySQL указывается в следующем формате: jdbc:mysql://localhost/название_базы данных
Пример создания подключения к созданной выше локальной базе данных store:
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/store", "root", "password");
После завершения работы с подключением его следует закрыть с помощью метода close():
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/store", "root", "password"); // работа с базой данных connection.close();
Либо мы можем использовать конструкцию try:
try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/store", "root", "password")){ // работа с базой данных }
При подключении к базе данных MySQL мы можем столкнуться с рядом проблем. Например, определим следующий код подключения:
import java.sql.Connection; import java.sql.DriverManager; public class Program{ public static void main(String[] args) { try{ String url = "jdbc:mysql://localhost/store"; String username = "root"; String password = "password"; Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance(); try (Connection conn = DriverManager.getConnection(url, username, password)){ System.out.println("Connection to Store DB succesfull!"); } } catch(Exception ex){ System.out.println("Connection failed..."); System.out.println(ex); } } }
Даже если указаны правильно адрес базы данных, логин, пароль, мы все равно можем столкнуться с ошибками:
Из консольного вывода видно, что проблема заключается с SSL и часовым поясом. Чтобы решить данную проблему, необходимо указать в адресе подключения часовой пояс бд и параметры для использования ssl. В частности, я указываю, что SSL не будет использоваться и что часовым поясом будет московский часовой пояс:
String url = "jdbc:mysql://localhost/store?serverTimezone=Europe/Moscow&useSSL=false";
Параметры подключения указываются после вопросительного знака после названия базы данных. Параметр serverTimezone
указывает на название часового пояса сервера бд.
В данном случае "Europe/Moscow", cписок всех допустимых названий часовых поясов можно найти на странице https://gist.github.com/kinjal/9105369.
И параметр useSSL=false
указывает, что SSL не будет применяться.
Мы можем определить все данные для подключения непосредственно в программе. Однако что если какие-то данные были изменены? В этом случае потребуется перекомпиляция приложения. Иногда это не всегда удобно, например, отсутствует досуп к исходникам, или перекомпиляция займет довольно продолжительное время. В этом случае мы можем хранить настройки в файле.
Так, создадим в папке программы новый текстовый файл database.properties, в котором определим настройки подключения:
url = jdbc:mysql://localhost/store?serverTimezone=Europe/Moscow&useSSL=false username = root password = password
Загрузим эти настройки в программе:
import java.sql.*; import java.nio.file.*; import java.io.*; import java.util.*; public class Program{ public static void main(String[] args) { try{ Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance(); try (Connection conn = getConnection()){ System.out.println("Connection to Store DB succesfull!"); } } catch(Exception ex){ System.out.println("Connection failed..."); System.out.println(ex); } } public static Connection getConnection() throws SQLException, IOException{ Properties props = new Properties(); try(InputStream in = Files.newInputStream(Paths.get("database.properties"))){ props.load(in); } String url = props.getProperty("url"); String username = props.getProperty("username"); String password = props.getProperty("password"); return DriverManager.getConnection(url, username, password); } }