Mysql запрос в java

Как подключиться к MySQL с помощью Java

Узнайте, как подключиться к базе данных MySQL с использованием Java и JDBC, выполнять SQL-запросы и обрабатывать результаты в этой практической статье!

В этой статье мы рассмотрим процесс подключения к базе данных MySQL с использованием Java и JDBC (Java Database Connectivity). JDBC — это API, предоставляющее возможность выполнять SQL-запросы и обрабатывать результаты с помощью Java.

Шаг 1: Установка и настройка MySQL

Для начала убедитесь, что у вас установлен MySQL Server на вашем компьютере или доступен удаленный сервер с MySQL. Если нет, то установите его, следуя инструкциям на официальном сайте: MySQL Server.

Шаг 2: Добавление JDBC драйвера

Для подключения к MySQL с помощью Java нам потребуется JDBC драйвер. Вы можете скачать его с официального сайта: MySQL Connector/J.

После скачивания jar-файла добавьте его в ваш проект. В зависимости от используемой среды разработки процесс может немного отличаться. Например, в IntelliJ IDEA следует выполнить следующие действия:

  1. Откройте свойства проекта (File → Project Structure).
  2. Выберите вкладку «Libraries».
  3. Нажмите на «+» и выберите «Java».
  4. Укажите путь к скачанному jar-файлу и нажмите «OK».
Читайте также:  Host from url javascript

Шаг 3: Создание подключения к базе данных

Теперь мы можем написать код, который будет подключаться к базе данных MySQL. Вот пример:

import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class Main < public static void main(String[] args) < String url = "jdbc:mysql://localhost:3306/my_database?useSSL=false&serverTimezone=UTC"; String user = "my_user"; String password = "my_password"; try < Connection connection = DriverManager.getConnection(url, user, password); System.out.println("Подключение к базе данных успешно установлено!"); connection.close(); >catch (SQLException e) < System.out.println("Ошибка при подключении к базе данных:"); e.printStackTrace(); >> >

В этом примере мы используем класс DriverManager для получения соединения с базой данных. Важно указать правильный URL, имя пользователя и пароль для вашей базы данных.

Обратите внимание на параметры useSSL=false и serverTimezone=UTC в URL. Эти параметры отключают использование SSL и устанавливают временную зону сервера соответственно. Вы можете изменить их в соответствии с конфигурацией вашего сервера.

Шаг 4: Выполнение SQL-запросов

После подключения к базе данных вы можете выполнять SQL-запросы, используя Java и JDBC. Вот пример выполнения SELECT-запроса:

import java.sql.*; public class Main < public static void main(String[] args) < String url = "jdbc:mysql://localhost:3306/my_database?useSSL=false&serverTimezone=UTC"; String user = "my_user"; String password = "my_password"; try < Connection connection = DriverManager.getConnection(url, user, password); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery("SELECT * FROM my_table"); while (resultSet.next()) < System.out.println(resultSet.getString("column_name")); >resultSet.close(); statement.close(); connection.close(); > catch (SQLException e) < System.out.println("Ошибка при выполнении SQL-запроса:"); e.printStackTrace(); >> >

В этом примере мы создаем Statement и выполняем SQL-запрос с помощью метода executeQuery . Результаты запроса хранятся в объекте ResultSet , который мы обрабатываем с помощью цикла while .

Не забывайте закрывать соединение, Statement и ResultSet после использования!

Теперь вы знаете, как подключиться к базе данных MySQL с помощью Java и JDBC, и выполнять SQL-запросы. Удачи вам в изучении Java-разработки! 😊

И если вам нужна дополнительная помощь или обучение, рекомендуем посетить нашу онлайн-школу:

Источник

Mysql запрос в java

Для выборки данных с помощью команды SELECT применяется метод executeQuery :

ResultSet executeQuery("Команда_SQL")

Метод возвращает объект ResultSet, который содержит все полученные данные. Как эти данные получить?

В объекте ResultSet итератор устаналивается на позиции перед первой строкой. И чтобы переместиться к первой строке (и ко всем последующим) необходимо вызвать метод next() . Пока в наборе ResultSet есть доступные строки, метод next будет возвращать true. Типичное перемещение по набору строк:

ResultSet resultSet = statement.executeQuery("SELECT * FROM Products"); while(resultSet.next()) < // получение содержимого строк >

То есть пока в resultSet есть доступные строки, будет выполняться цикл while, который будет переходить к следующей строке в наборе.

После перехода к строке мы можем получить ее содержимое. Для этого у ResultSet определен ряд методов. Некоторые из них:

  • getBoolean() возвращает значение boolean
  • getDate() возвращает значение Date
  • getDouble() возвращает значение double
  • getInt() возвращает значение int
  • getFloat() возвращает значение float
  • getLong() возвращает значение long
  • getNString() возвращает значение String
  • getString() возвращает значение String

В зависимости от того, данные какого тип хранятся в том или ином столбце, мы можем использовать тот или иной метод. Каждый из этих методов имеет две версии:

int getInt(int columnIndex) int getInt(String columnLabel)

Первая версия получает данные из столбца с номером columnIndex. Вторая версия получает данные из столбца с названием columnLabel.

Например, в прошлых темах была создана таблица, которая имеет три столбца:

CREATE TABLE products ( Id INT PRIMARY KEY AUTO_INCREMENT, ProductName VARCHAR(20), Price INT )
import java.sql.*; public class Program < public static void main(String[] args) < try< String url = "jdbc:mysql://localhost/store?serverTimezone=Europe/Moscow&useSSL=false"; String username = "root"; String password = "password"; Class.forName("com.mysql.cj.jdbc.Driver").getDeclaredConstructor().newInstance(); try (Connection conn = DriverManager.getConnection(url, username, password))< Statement statement = conn.createStatement(); ResultSet resultSet = statement.executeQuery("SELECT * FROM Products"); while(resultSet.next())< int name = resultSet.getString(2); int price = resultSet.getInt(3); System.out.printf("%d. %s - %d \n", id, name, price); >> > catch(Exception ex) < System.out.println("Connection failed. "); System.out.println(ex); >> >

Первый столбец в таблице — столбец Id представляет тип int, поэтому для его получения используется метод getInt() . Второй столбец — ProductName представляет строку, поэтому для получения его данных применяется метод getString() . То есть между типом данных и методом есть соответствие. И мы не можем, к примеру, получить значение столбца ProductName с помощью метода getInt.

Также отмечу, что индексация столбцов начинается с 1, а не с 0.

Возможный консольный вывод программы:

C:\Java>javac Program.java C:\Java>java -classpath c:\Java\mysql-connector-java-8.0.11.jar;c:\Java Program 1. iPhone X - 71000 2. Galaxy S9 - 40000 C:\Java>

Однако мы можем точно не знать порядок следования данных полученном наборе. В этом случае мы можем вместо номеров столбцов можно передать названия столбцов:

ResultSet resultSet = statement.executeQuery(«SELECT * FROM Products»); while(resultSet.next())

Источник

Работа с БД с помощью JDBC

Взаимодействовать с БД мы можем с помощью трёх интерфейсов, которые реализуются каждым драйвером:

  1. Statement — этот интерфейс используется для доступа к БД для общих целей. Он крайне полезен, когда мы используем статические SQL – выражения во время работы программы. Этот интерфейс не принимает никаких параметров.
  2. PreparedStatement — этот интерфейс может принимать параметры во время работы программы.
  3. CallableStatement — этот интерфейс становится полезным в случае, когда мы хотим получить доступ к различным процедурам БД. Он также может принимать параметры во время работы программы.

2. Интерфейс Statement

Statement statement = connection.createStatement();

После этого мы можем использовать наш экземпляр statement для выполнения SQL – запросов. Для этой цели интерфейс Statement имеет три метода, которые реализуются каждой конкретной реализацией JDBC драйвера:

  • boolean execute(String SQL) — позволяет вам выполнить Statement, когда неизвестно заранее, является SQL-строка запросом или обновлением. Метод возвращает true, если команда создала результирующий набор.
  • int executeUpdate(String SQL) используется для выполнения обновлений. Он возвращает количество обновленных строк. Для выполнения операторов INSERT, UPDATE или DELETE.
  • ResultSet executeQuery(String SQL) — используется для выполнения запросов (SELECT). Он возвращает для обработки результирующий набор.

Пример 1. Создание таблицы

import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import static jdbc.ConnectionData.URL; import static jdbc.ConnectionData.USER; import static jdbc.ConnectionData.PASSWORD; public class CreatingTable < private static final String CREATE_TABLE_QUERY = "CREATE TABLE users " + "(id INT(5) NOT NULL AUTO_INCREMENT," + " username VARCHAR(50), " + "PRIMARY KEY(id));"; public static void main(String[] args) < try (Connection connection = DriverManager.getConnection(URL, USER, PASSWORD); Statement statement = connection.createStatement()) < statement.executeUpdate(CREATE_TABLE_QUERY); >catch (Exception e) < System.out.println(e.getMessage()); >> >
public class ConnectionData < public static final String DRIVER = "com.mysql.jdbc.Driver"; public static final String DB = "catalog"; public static final String URL = "jdbc:mysql://localhost:3306/" + DB; public static final String USER = "root"; public static final String PASSWORD = "admin"; >

3. Интерфейс ResultSet

Этот интерфейс представляет результирующий набор базы данных. Он обеспечивает приложению построчный доступ к результатам запросов в базе данных.

Во время обработки запроса ResultSet поддерживает указатель на текущую обрабатываемую строку. Приложение последовательно перемещается по результатам, пока они не будут все обработаны или не будет закрыт ResultSet.

Основные методы интерфейса ResultSet:

  1. public boolean absolute(int row) throws SQLException — метод перемещает курсор на заданное число строк от начала, если число положительно, и от конца — если отрицательно.
  2. public void afterLast() throws SQLException — этот метод перемещает курсор в конец результирующего набора за последнюю строку.
  3. public void beforeFirst() throws SQLException — этот метод перемещает курсор в начало результирующего набора перед первой строкой.
  4. public void deleteRow() throws SQLException — удаляет текущую строку из результирующего набора и базы данных.
  5. public ResultSetMetaData getMetaData() throws SQLException — предоставляет объект метаданных для данного ResultSet. Класс ResultSetMetaData содержит информацию о результирующей таблице, такую как количество столбцов, их заголовок и т.д.
  6. public int getRow() throws SQLException — возвращает номер текущей строки.
  7. public Statement getStatement() throws SQLException — возвращает экземпляр Statement, который произвел данный результирующий набор.
  8. public boolean next() throws SQLException, public boolean previous() throws SQLException — эти методы позволяют переместиться в результирующем наборе на одну строку вперед или назад. Во вновь созданном результирующем наборе курсор устанавливается перед первой строкой, поэтому первое обращение к методу next() влечет позиционирование на первую строку. Эти методы возвращают true, если остается строка для дальнейшего перемещения. Если строк для обработки больше нет, возвращается false.
  9. public void close() throws SQLException — осуществляет немедленное закрытие ResultSet вручную. Обычно этого не требуется, так как закрытие Statement, связанного с ResultSet, автоматически закрывает ResultSet.

Пример 2. Использование интерфейса ResultSet

public class RetrieveData < private static final String SELECT_QUERY = "SELECT * FROM users;"; public static void main(String[] args) < try (Connection connection = DriverManager.getConnection(URL, USER, PASSWORD); Statement statement = connection.createStatement()) < ResultSet resultSet = statement.executeQuery(SELECT_QUERY); System.out.printf("%-20s%s%n", "id", "username"); System.out.println("-------------------------------"); while (resultSet.next()) < int String name = resultSet.getString("username"); System.out.printf("%-20d%s%n", id, name); >> catch (SQLException e) < System.out.println(e.getMessage()); >> >

4. Пакетное выполнение запросов

Для выполнения набора из нескольких запросов на обновление данных в интерфейс Statement были добавлены методы:

void addBatch(String) int[] executeBatch()‏

Пакетное выполнение запросов уменьшает трафик между клиентом и СУБД и может привести к существенному повышению производительности.

Пример 3. Пакетное выполнение запросов

import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import static jdbc.ConnectionData.URL; import static jdbc.ConnectionData.USER; import static jdbc.ConnectionData.PASSWORD; public class InsertBatchData < public static void main(String[] args) < try (Connection connection = DriverManager.getConnection(URL, USER, PASSWORD); Statement statement = connection.createStatement()) < statement.addBatch("INSERT INTO users (username) VALUES ('sidorov')"); statement.addBatch("INSERT INTO users (username) VALUES ('petrov')"); statement.addBatch("INSERT INTO users (username) VALUES ('kozlov')"); statement.executeBatch(); >catch (SQLException e) < System.out.println(e.getMessage()); >> >

5. Интерфейс PreparedStatement

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

SELECT name FROM persons WHERE age=?

Перед выполнением запроса значение каждого вопросительного знака явно устанавливается методами setXxx()‏, например:

Использование PreparedStatement приводит к более быстрому выполнению запросов при их многократном вызове с различными параметрами.

Пример 4. Использование интерфейса PreparedStatement

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import static jdbc.ConnectionData.URL; import static jdbc.ConnectionData.USER; import static jdbc.ConnectionData.PASSWORD; public class RetrieveDataPreparedStatement < private static final String SELECT_QUERY = "SELECT * FROM users WHERE id>? AND username LIKE ?"; public static void main(String[] args) < try (Connection connection = DriverManager.getConnection(URL, USER, PASSWORD); PreparedStatement preparedStatement = connection.prepareStatement(SELECT_QUERY)) < preparedStatement.setInt(1, 2); preparedStatement.setString(2, "P%"); ResultSet resultSet = preparedStatement.executeQuery(); while (resultSet.next()) < System.out.printf("%d%23s%n", resultSet.getInt("id"), resultSet.getString("username")); >> catch (Exception e) < e.printStackTrace(); >> >

Пример 5. Использование интерфейса PreparedStatement

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import static jdbc.ConnectionData.URL; import static jdbc.ConnectionData.USER; import static jdbc.ConnectionData.PASSWORD; public class InsertDataPreparedStatement < private static final String INSERT_QUERY = "INSERT INTO users (username) VALUES (?)"; public static void main(String[] args) < try (Connection connection = DriverManager.getConnection(URL, USER, PASSWORD); PreparedStatement preparedStatement = connection.prepareStatement(INSERT_QUERY)) < preparedStatement.setString(1, "misha"); preparedStatement.addBatch(); preparedStatement.setString(1, "grisha"); preparedStatement.addBatch(); preparedStatement.executeBatch(); >catch (SQLException e) < System.out.println(e.getMessage()); >> >

6. Использование properties файлов

Пример 6. Содержимое database.properties файла

db.driver = com.mysql.jdbc.Driver db.name = catalog db.url = jdbc:mysql://localhost:3306/ db.user = root db.password = admin 

Пример 7. Использование ResourceBundle для чтения данных для аутентификации

import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.ResourceBundle; public class ConnectorDB < public static Connection getConnection() throws SQLException < ResourceBundle resource = ResourceBundle.getBundle("database"); String url = resource.getString("db.url"); String user = resource.getString("db.user"); String pass = resource.getString("db.password"); String dbName = resource.getString("db.name"); return DriverManager.getConnection(url + dbName, user, pass); >>

7. Data access object (DAO)

В программном обеспечении data access object (DAO) — это объект, который предоставляет абстрактный интерфейс к какому-либо типу базы данных или механизму хранения. DAO может использоваться для разных видов доступа к БД (JDBC, JPA).

Пример 8. Абстрактный класс DAO

import java.util.List; public abstract class AbstractDAO  < public abstract ListfindAll(); public abstract T findEntityById(K id); public abstract boolean delete(K id); public abstract boolean delete(T entity); public abstract boolean create(T entity); public abstract T update(T entity); >

Пример 9. Абстрактный класс DAO

import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class UserDAO extends AbstractDAO  < public static final String SQL_SELECT_ALL_USERS = "SELECT * FROM users"; public static final String SQL_SELECT_USER_ID = "SELECT * FROM users WHERE @Override public ListfindAll() < Listusers = new ArrayList<>(); try (Connection connection = ConnectorDB.getConnection(); Statement statement = connection.createStatement()) < ResultSet rs = statement.executeQuery(SQL_SELECT_ALL_USERS); while (rs.next()) < int String name = rs.getString(2); users.add(new User(id, name)); >> catch (SQLException e) < System.out.println(e.getMessage()); >return users; > @Override public User findEntityById(Integer id) < User user = null; try (Connection connection = ConnectorDB.getConnection(); PreparedStatement statement = connection.prepareStatement(SQL_SELECT_USER_ID)) < statement.setInt(1, id); ResultSet rs = statement.executeQuery(); if (rs.next()) < String name = rs.getString(2); user = new User(id, name); >> catch (SQLException e) < System.out.println(e.getMessage()); >return user; > @Override public boolean delete(Integer id) < throw new UnsupportedOperationException(); >@Override public boolean delete(User entity) < throw new UnsupportedOperationException(); >@Override public boolean create(User entity) < throw new UnsupportedOperationException(); >@Override public User update(User entity) < throw new UnsupportedOperationException(); >>

Источник

Оцените статью