Вы находитесь на странице: 1из 14

Базы данных. JDBC.

DAO

Часть 2

Борисов Андрей
andriy.borysov@ukr.net
Контрольная работа
1. Создайте экземпляр класса FileOutputStream, запишите в него 1 байт и
закройте.
2. Какая разница между MySQL и SQLite с точки зрения JDBC?

2
JDBC. Установка драйвера
● MySQL
Добавить зависимости в файл build.gradle в секцию dependencies:
implementation 'mysql:mysql-connector-java:8.0.16'

● SQLite
Добавить зависимости в файл build.gradle в секцию dependencies:
implementation 'org.xerial:sqlite-jdbc:3.27.2.1'

3
JDBC. Соединение
● MySQL
try (Connection connection = DriverManager.getConnection(
"jdbc:mysql://localhost/books_and_authors?serverTimezone=Europe/Kiev",
"root", "password")) {
// ... work with connection
}

● SQLite
try (Connection connection = DriverManager.getConnection("jdbc:sqlite:sample.db")) {
// ... work with connection
}

4
JDBC. Создание таблицы
Statement statement = connection.createStatement();

statement.executeUpdate("CREATE TABLE person (" +

"id INTEGER PRIMARY KEY AUTOINCREMENT, " +

"name VARCHAR(100)" +

")");

5
JDBC. Выполнение запросов
statement.executeUpdate("INSERT INTO person VALUES('adam')");

statement.executeUpdate("INSERT INTO person VALUES('eva')");

ResultSet cursor = statement.executeQuery("SELECT * FROM person");

while (cursor.next()) {

System.out.println("name = " + cursor.getString("name"));

System.out.println("id = " + cursor.getInt("id"));

6
SQL. Связь один-к-одному

books

id name author publish_year

1 Властелин колец Толкин 1900

2 Гарри Поттер Роулинг 2001

3 Семиевье Стивенсон 2015


SQL. Связь один-ко-многим

authors books

id name id name author_id publish_year

1 Общество 1 SQLite для чайников 1 2018

2 Дейтел 2 С++ для чайников 2 2016

3 Страуструп 3 Java для начинающих 2 2015

4 C# для начинающих 2 2013


Design Patterns. Data Access Object
Объект, предоставляющий основные CRUD операции над, чаще всего,
одной сущностью.

Часто его называют Repository, но между ними есть отличия.

Операции CRUD - Create, Read, Update, Delete.

9
Design Patterns. DAO
class BookDao {
private final Connection connection;
public BookDao(Connection sqlConnection) {
connection = sqlConnection;
}

public Optional<Book> getById(int id) {


try (Statement statement = this.connection.createStatement();
ResultSet cursor = statement.executeQuery(
String.format("SELECT * FROM books WHERE id = %d", id))) {
if (!cursor.next()) {
return Optional.empty();
}
return this.createBookFromCursorIfPossible(cursor);
}
}
}
10
Практика
1. Объявить классы книг и авторов, где у каждой книги может быть один автор.
2. Определить структуру отдельных таблиц для книг (book) и авторов (author) с
использованием первичных ключей. Поле author_id в таблице книг указывает на запись в
таблице авторов (связь один-ко-многим).
3. Реализовать классы DAO для доступа к таблицам книг и авторов:
a. Добавить основные методы getAll, getById, update, delete
b. Добавить дополнительные методы на свое усмотрение
c. Реализовать, используя JDBC и SQL

11
Полезные ссылки
● Data access object / Wikipedia
● JDBC Tutorial / TutorialsPoint
● SQLite JDBC Driver / GitHub

12
Домашнее задание

Хорстман К. Библиотека профессионала. Java.


Том 2. Расширенные средства программирования. 10-е издание.
● Глава 5. Работа с базами данных

13
Спасибо за внимание

Вопросы?
14