JavaRush /Курсы /Модуль 4. Работа с БД /Первая JDBC-программа

Первая JDBC-программа

Модуль 4. Работа с БД
7 уровень , 1 лекция
Открыта

Maven

Самая важная деталь – сама библиотека JDBC Driver для MySQL сервера. Она просто так не появится на твоем компьютере, поэтому тебе нужно ее туда добавить.

Если ты используешь Maven, то тебе нужно помочь ему – указать нужную библиотеку.

JDBC-драйвер для MySQL:

 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency>

На mvn repository, можно проверить обновления

Просто добавь этот код в твой pom.xml.

Также приведу еще несколько популярных драйверов.

JDBC-драйвер для PostgeSQL:

<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.4.0</version> </dependency>

JDBC-драйвер для Oracle:

<dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>21.5.0.0</version> </dependency>

JDBC-драйвер для H2:

<dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>2.1.214</version> </dependency>

Первый запрос к базе данных

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

Этап 1. Добавь перед методом main() несколько импортов – это существенно облегчит тебе жизнь:


import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;

Этап 2. Сначала нам нужно создать подключение к базе данных. Для этого в методе main() напиши такой код:


   Connection connection  = DriverManager.getConnection(
              "jdbc:mysql://localhost:3306/test",  
              "login", "password");

Можно и в одну строчку – как тебе будет удобнее. Логин и пароль, ясное дело, нужно подставить реальные от твоего локального MySQL-сервера.

Этап 3. Создаем запрос к базе данных. Давай достанем всех пользователей из таблицы user. Тогда тебе нужно будет добавить такую строчку кода:


        Statement statement = connection.createStatement();
    	ResultSet results = statement.executeQuery("SELECT * FROM user");

Это аж две строчки. В первой мы создаем объект Statement, а во второй с его помощью выполняем запрос к базе данных. Метод executeQuery() выполняет запрос к базе данных и возвращает объект типа ResultSet.

Этап 4. Выведем на экран данные, которые содержатся в объекте ResultSet.

ResultSet – это не множество, он просто так называется. В нем хранится результат выполнения запроса. Этот объект чем-то похож на итератор: он позволяет устанавливать/менять текущую строку результата, а затем из этой текущей строки можно получить данные. Добавь в ваш пример такой код:


    	while (results.next()) {
        	Integer id = results.getInt(1);
        	String name = results.getString(2);
        	System.out.println(results.getRow() + ". " + id + "\t"+ name);
    	}

Метод next() меняет текущую строку результата на следующую. Он возвращает true, если такая строка есть, и false, если строки закончились.

Затем из текущей строки объекта ResultSet можно получить данные из его колонок:

  • getRow() – возвращает номер текущей строки в объекте ResultSet
  • getInt(N) – вернет данные N-й колонки текущей строки как тип int
  • getString(N) – вернет данные N-й колонки текущей строки как тип String

Полный листинг программы

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


package org.example;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
 
public class JdbcApplicatin {
    public static void main(String[] args) throws  Exception{
 	   Connection connection  = DriverManager.getConnection(
          	"jdbc:mysql://localhost:3306/test", 
          	"root", "secret");
 
        Statement statement = connection.createStatement();
    	ResultSet results = statement.executeQuery("SELECT * FROM user");
 
    	while (results.next()) {
        	Integer id = results.getInt(1);
        	String name = results.getString(2);
        	System.out.println(results.getRow() + ". " + id + "\t"+ name);
    	}
    	connection.close();
    }
}

И мой вывод на экран после запуска программы:

"C:\Program Files\Java\jdk-17.0.3.1\bin\java.exe…
1. 1 Иванов Иван
2. 2 Петров Николай
3. 3 Сидоров Виталий
Process finished with exit code 0
1
Задача
Модуль 4. Работа с БД, 7 уровень, 1 лекция
Недоступна
task0701
В методе main создай подключение к БД с помощью метода getConnection(String, String, String) класса DriverManager. Используй URL "jdbc:mysql://localhost:3306/test", пользователя "root" и такой же пароль. Закрой Connection.
1
Задача
Модуль 4. Работа с БД, 7 уровень, 1 лекция
Недоступна
task0702
В методе main создай подключение к БД с помощью метода getConnection(String, String, String) класса DriverManager. Используй URL "jdbc:mysql://localhost:3306/test", пользователя "root" и такой же пароль. Получи Statement используя метод createStatement без параметров. С помощью
1
Задача
Модуль 4. Работа с БД, 7 уровень, 1 лекция
Недоступна
task0703
В методе main создай подключение к БД с помощью метода getConnection(String, String, String) класса DriverManager. Используй URL "jdbc:mysql://localhost:3306/test", пользователя "root" и такой же пароль. Получи Statement используя метод createStatement без параметров. С помощью
Комментарии (23)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Gans Electro Уровень 40
20 июня 2024
В IDEA открыл новый Maven проект, выбрал quickstart и он сам загрузил много библиотек. Изменил только pom файл
Ольга Николенко Уровень 109 Expert
23 мая 2024
Задача 0702 - в запросе "SELECT 7 * 8" пробелы вокруг * обязательны, иначе не принимает.
Павел Уровень 19 Expert
6 марта 2024
Такое впечатление как будто начал смотреть сериал с пятой серии. Где первые серии? Где создание базы user?
Kirill Уровень 106 Expert
27 июля 2024
В предыдущем уровне
Роман Уровень 88
5 января 2025
Зачем здесь это показывать, если в прошлых уровнях уже не раз схемы и таблицы в mysql workbench создавали? Вы вместо схемы test тут можете любую другую из вашего списка в mysql workbench указать, а вместо таблицы user любую вашу таблицу из этой схемы.
Дмитрий Уровень 37
3 марта 2024
закрывайте connection в finally блоке - это best practice
Anonymous #3368252 Уровень 1
13 марта 2024
а еще лучше использовать try-with-resources
Alex Gofman Уровень 11 Expert
22 декабря 2023
У меня результат Error: Could not find or load main class org.example.Main Caused by: java.lang.ClassNotFoundException: org.example.Main
Павел Уровень 19 Expert
6 марта 2024
Alex Gofman, стремительное развитие не всегда приносит положительные результаты. Ознакомление с JDBC на 11 уровне! Я бы так не смог.
Павел Уровень 111 Expert
16 ноября 2023
Если у кого-то будет выбрасываться исключение "No suitable driver found for..." нужно сделать следующее: - скачать JDBC отсюда https://dev.mysql.com/downloads/connector/j/. Если у вас OC которой нет в выпадающем списке, то выбрать "Platform Independent" - из скачанного zip-архива вытащить mysql-connector-j-8.2.0.jar, сохранить его в папке проекта - в IDEA открываем настройки проекта: кликаем по проекту правой клавишей, выбираем "Open Module Settings", или просто нажимаем F4 - в разделе Libraries добавляем ранее упомянутый .jar-файл.
Данила Уровень 111 Expert
26 ноября 2023
Ещё раз спасибо большое!
Anonymous #3272489 Уровень 92 Expert
20 сентября 2023
зависимость для mySQL теперь выглядит так <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.0.33</version> </dependency>
The Nefriston Уровень 31
25 августа 2023
не большая пометка в Connection connection = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test", "login", "password"); вместо test нужно вписать название схемы (я не сразу понял)
Сергей Уровень 108 Expert
22 августа 2023
У меня все запустилось. вывел в консоль все ранее созданные таблицы в схемах: library, lego. создал мавен проект с архитипом quick start, вставил туда зависимость упомянутую выше. в цикле где получаются значения колонок из ResultSet, добавил или убавил строки с нужным типом исходя из структуры получаемой таблицы. И как снизу в комментах написал(-ла) добрый человек AnnaVin для получения нужных колонок использовал не номера как в примере лекции getString(3), а название колонок getString("first_name")
MrFurion Уровень 32
30 июля 2023
что за херата ? Не могу запустить проект. Если делаю проект из айдии то могу запустить но немогу вставить pom.xml. Если делаю проэт через мавен не могу запустить RUN его просто на просто нету. Что за хрень кто с таким столкнулся ? Помогите!!!
29 августа 2023
Треба створити саме Maven проект.