Как подключить базу данных к java
Перейти к содержимому

Как подключить базу данных к java

  • автор:

Как подключить базу данных к java

Вначале создадим на сервере 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")) < // работа с базой данных >

Возможные проблемы с часовыми поясами и SSL

При подключении к базе данных 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); >> >

Даже если указаны правильно адрес базы данных, логин, пароль, мы все равно можем столкнуться с ошибками:

timezone in java connection to mysql

Из консольного вывода видно, что проблема заключается с 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); > >

Как подключить mysql к java

Для подключения к MySQL базе данных из Java необходимо выполнить несколько шагов:

  1. Скачать и установить JDBC драйвер для MySQL . Он позволяет Java-приложению взаимодействовать с базой данных MySQL . Драйвер можно скачать с официального сайта MySQL или использовать зависимость в Maven/Gradle
  2. Импортировать пакет java.sql.* для использования JDBC API
  3. Установить соединение с базой данных, используя DriverManager.getConnection(url, user, password) метод. В качестве параметров передаются URL , имя пользователя и пароль.
  4. Выполнить запросы к базе данных, используя Statement или PreparedStatement
  5. Обработать результаты запросов.

Например, приведенный ниже код демонстрирует подключение к базе данных MySQL и выполнение простого запроса:

import java.sql.*; public class MySQLExample  public static void main(String[] args)  String url = "jdbc:mysql://localhost:3306/mydatabase"; String user = "root"; String password = "mypassword"; try (Connection conn = DriverManager.getConnection(url, user, password))  Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM mytable"); while (rs.next())  System.out.println(rs.getInt("id") + " " + rs.getString("name")); > > catch (SQLException e)  System.out.println("Error: " + e.getMessage()); > > > 

В данном примере мы

  • создаем объект Connection , используя DriverManager.getConnection() , и передаем в него URL , имя пользователя и пароль
  • создаем объект Statement и выполняем запрос SELECT * FROM mytable
  • результаты запроса мы обрабатываем в цикле while с помощью метода rs.next() , который переходит на следующую строку результата, и методов rs.getInt() и rs.getString() , которые получают значения полей по их названиям.
  • если возникает исключение SQLException , мы выводим сообщение об ошибке.

Как использовать базу данных MySQL в Java

Обложка поста Как использовать базу данных MySQL в Java

В этой статье мы научимся подключаться к базе данных MySQL из Java-кода и выполнять простые запросы для получения и обновления данных. Для того, чтобы получить доступ к базе данных, мы будем использовать JDBC (Java Database Connectivity) API, который входит в стандартную библиотеку Java. JDBC позволяет подключиться к любой базе данных: Postgres, MySQL, SQL Server, Oracle и т. д. — при наличии соответствующей реализации драйвера, необходимого для подключения. Для базы данных MySQL мы будем использовать драйвер Type 4 JDBC из пакета mysql-connector-java-5.1.23-bin.jar . Он написан на чистой Java, а значит, нам не понадобятся какие-либо нативные библиотеки или ODBC-мост. Все, что нам надо будет сделать — это положить JAR-файл в директорию, содержащуюся в CLASSPATH. JAR-файл содержит класс com.mysql.jdbc.Driver , необходимый для подключения к MySQL. Если его не окажется в CLASSPATH, во время выполнения программы выбросится исключение java.lang.ClassNotFoundException , поэтому убедитесь, что вы правильно настроили пути.

Кстати, если вы ищете хорошую книгу по использованию JDBC, обратите внимание на Practical Database Programming with Java (Ying Bai). Это относительно новая книга, и в ней рассматриваются две самые популярные базы данных: Oracle и SQL Server 2008. В книге используется IDE NetBeans для примеров и описываются все инструменты, необходимые для работы с базами данных в Java. Это отличная книга для начинающих и опытных программистов.

Подключаем базу данных MySQL с помощью JDBC

Для того, чтобы подключить базу данных MySQL, нам потребуется четыре вещи:

  1. Строка подключения JDBC (например:
    jdbc:mysql://localhost:3306/test).
  2. Имя пользователя (root).
  3. Пароль (root).
  4. База данных с некоторым количеством таблиц для примера (например, база данных книг).

Строка подключения для MySQL начинается с jdbc:mysql . Это название протокола соединения, за которым следуют хост и порт подключения, на которых запущена база данных. В нашем случае это localhost с портом по умолчанию 3306 (если вы его не поменяли при установке). Следующая часть — test — имя базы данных, которая уже существует в MySQL. Мы можем создать таблицу Books :

CREATE TABLE `books` ( `id` int(11) NOT NULL, `name` varchar(50) NOT NULL, `author` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 

и наполнить её хорошими книгами:

INSERT INTO test.books (id, `name`, author) VALUES (1, 'Effective Java', 'Joshua Bloch'); INSERT INTO test.books (id, `name`, author) VALUES (2, 'Java Concurrency in Practice', 'Brian Goetz'); 

Программа на Java, которая использует базу данных

Теперь давайте напишем программу на Java, которая будет подключаться к нашей базе данных, запущенной на localhost . Важно помнить о том, что необходимо закрывать соединение, запросы и результат выполнения после завершения работы с ними. Также важно закрывать их в finally-блоке, со своей try/catch оберткой, поскольку сам метод close() может кинуть исключение, что приведет к утечке ресурсов. За подробной информацией вы можете обратиться к этой статье. Кроме того, вы можете использовать обертку try-with-resource, которая появилась в Java 7. Более того, это стандартный способ работы с ресурсами в Java 1.7.

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * Simple Java program to connect to MySQL database running on localhost and * running SELECT and INSERT query to retrieve and add data. * @author Javin Paul */ public class JavaToMySQL < // JDBC URL, username and password of MySQL server private static final String url = "jdbc:mysql://localhost:3306/test"; private static final String user = "root"; private static final String password = "root"; // JDBC variables for opening and managing connection private static Connection con; private static Statement stmt; private static ResultSet rs; public static void main(String args[]) < String query = "select count(*) from books"; try < // opening database connection to MySQL server con = DriverManager.getConnection(url, user, password); // getting Statement object to execute query stmt = con.createStatement(); // executing SELECT query rs = stmt.executeQuery(query); while (rs.next()) < int count = rs.getInt(1); System.out.println("Total number of books in the table : " + count); >> catch (SQLException sqlEx) < sqlEx.printStackTrace(); >finally < //close connection ,stmt and resultset here try < con.close(); >catch(SQLException se) < /*can't do anything */ >try < stmt.close(); >catch(SQLException se) < /*can't do anything */ >try < rs.close(); >catch(SQLException se) < /*can't do anything */ >> > > 

При первом запуске у вас, возможно, будет ошибка No suitable driver found for jdbc:mysql , если драйвера MySQL нет в CLASSPATH:

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/test/book at java.sql.DriverManager.getConnection(DriverManager.java:689) at java.sql.DriverManager.getConnection(DriverManager.java:247) at JavaToMySQL.main(JavaToMySQL.java:29) Exception in thread "main" java.lang.NullPointerException at JavaToMySQL.main(JavaToMySQL.java:46) Java Result: 1 

Добавим нужный JAR-файл в путь и снова запустим программу. Другая частая ошибка — указать таблицу в строке соединения: jdbc:mysql://localhost:3306/test/book . В этом случае вылетит следущее исключение:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'test/book' at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:408) at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) at com.mysql.jdbc.Util.getInstance(Util.java:386) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1053) 

Успешный запуск программы выведет на экран следующее:

Total number of books in the table: 2 

Результат верный, поскольку у нас в таблице только две книги: «Effective Java» и «Java Concurrency in Practice».

Кстати, если у вас был драйвер при компиляции, но отсутствует при запуске, вы получите исключение java.lang.ClassNotFoundException: com.mysql.jdbc.Driver . О том, как исправить эту ошибку, вы можете прочитать здесь.

Получаем данные с помощью SELECT-запроса в JDBC

Для получения данных из БД вы можете выполнить SELECT-запрос. В первом примере мы уже его использовали, но получили только количество строк. Теперь мы вернем сами строки. Большая часть программы останется без изменений, за исключением SQL-запроса и кода, возвращающего данные из объекта ResultSet :

String query = "select id, name, author from books"; rs = stmt.executeQuery(query); while (rs.next())

Этот код выведет на экран следующее:

id: 1, name: Effective Java, author: Joshua Bloch id: 2, name: Java Concurrency in Practice, author: Brian Goetz 

Тут есть пара моментов, на которые следует обратить внимание. Метод rs.getInt(1) используется для получения столбца с целочисленным типом, в нашем случае это столбец «id». Индексы в JDBC начинаются с единицы, поэтому rs.getInt(1) вернет значение первого столбца как целое число. В случае, если вы укажете неверный индекс (многие разработчики вызывают rs.getInt(0) для получения первого столбца), выбросится исключение InvalidColumnIndexException . Доступ к столбцам по индексу чреват ошибками, поэтому лучше использовать имя столбца, например, rs.getInt(«id») . Подробнее об этом вы можете прочитать в этой статье. Метод getString() используется для получения строковых значений из базы (например, VARCHAR ). Цикл будет выполняться, пока rs.next() не вернет false . Это значит, что строки закончились. В нашем случае в таблице две строки, поэтому цикл выполнится два раза, выводя информацию о книгах из таблицы на экран.

Добавляем данные с помощью INSERT-запроса в JDBC

Добавление данных мало отличается от их получения: мы просто используем INSERT-запрос вместо SELECT-запроса и метод executeUpdate() вместо executeQuery() . Этот метод используется для запросов INSERT, UPDATE и DELETE, а также для SQL DDL выражений, таких как CREATE, ALTER или DROP. Эти команды не возвращают результата, поэтому мы убираем все упоминания ResultSet ‘а в коде и изменяем запрос соответственно:

String query = "INSERT INTO test.books (id, name, author) \n" + " VALUES (3, 'Head First Java', 'Kathy Sieara');"; // executing SELECT query stmt.executeUpdate(query); 

После запуска программы вы можете проверить таблицу в СУБД. На этот раз вы увидите три записи в таблице:

Как использовать базу данных MySQL в Java 1

Теперь вы умеете подключаться к MySQL из Java-приложения и выполнять SELECT, INSERT, DELETE и UPDATE-запросы так же, как и в MySQL GUI. Для подключения мы используем объект Connection , для чтения результатов запроса — ResultSet . Убедитесь перед подключением, что сервер MySQL запущен и mysql-connector-java-5.1.17-bin.jar находится в CLASSPATH, чтобы избежать ClassNotFoundException .

Когда разберетесь с подключением и простыми запросами, имеет смысл изучить, как использовать подготавливаемые запросы (Prepared Statement) в Java для избежания SQL-инъекции. В боевом коде всегда следует использовать подготавливаемые запросы и связывание переменных.

Если вам понравилось это руководство и не терпится узнать больше о подключении и работе с базой данных из Java-программ, обратите внимание на следующие статьи:

  • Как подключиться к БД Oracle из Java-приложения;
  • Отличия межу Connected RowSet и Disconnected RowSet в Java;
  • Как использовать пул соединений в Spring;
  • 5 способов улучшить производительность БД в приложениях на Java;
  • Отличия между java.util.Date и java.sql.Date в Java;
  • Как выполнить INSERT или UPDATE, используя пакетные запросы JDBC;
  • Десять вопросов по JDBC на собеседованиях.

Полезные ссылки

  • Если у вас нет базы данных MySQL, вы можете ее скачать здесь;
  • Есди у вас нет драйвера MySQL для JDBC, вы можете скачать его отсюда;
  • Рекомендованную книгу «Practical Database Programming with Java» можно купить на Amazon.

Перевод статьи «How to Connect to MySQL database in Java with Example»

#10 — Подключение к базе данных (Java JDBC)

#10 - Подключение к базе данных (Java JDBC)

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

Видеоурок

Java использует технологию JDBC для работы с базами данных. Чтобы выполнить подключение к какой-либо базе данных всегда необходимо использовать этот драйвер.

Кроме того, поскольку мы работаем с MySQL, то при работе с этой базой данных необходимо докачивать специальный коннектор, что объединяет Java JDBC и базу данных MySQL. Скачать коннектор MySQL можно по этой ссылке .

Подключение к БД

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

Connection dbConnection; public Connection getDbConnection() throws ClassNotFoundException, SQLException < String connectionString = "jdbc:mysql://" + dbHost + ":" + dbPort + "/" + dbName; Class.forName("com.mysql.jdbc.Driver"); dbConnection = DriverManager.getConnection(connectionString, dbUser, dbPass); return dbConnection; >

Названия таблиц, полей, базы данных и прочее — лучше хранить в переменных или отдельных классах. Такой подход позволит более просто выполнять перенос проекта с одной базы данных в другую.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *