Проект

Общее

Профиль

JDBC » История » Версия 1

Александр Александров, 21.04.2019 17:15

1 1 Александр Александров
h1. JDBC
2
3
h2. Вопросы
4
5
# Что такое JDBC?
6
# Этапы работы с базой данных с использованием JDBC?
7
# Как создать Connection?
8
# Чем отличается Statement от PreparedStatement?
9
# Как вызвать хранимую процедуру?
10
# Как правильно закрыть Connection?
11
# Какие есть уровни изоляции транзакций?
12
# Какие есть типов чтения транзакций?
13
14
h2. Ответы
15
16
h3. Что такое JDBC?
17
18
API JDBC (Java DataBase Connectivity) - стандартный прикладной интерфейс языка Java для организации взаимодействия между приложением и СУБД. Взаимодействие осуществляется с помощью драйверов JDBC, обеспечиваю щих реализацию общих интерфейсов для конкретных СУБД и конкретних протоколов. В JDBC определяются четыре типа драйверов.
19
20
h3. Этапы работы с базой данных с использованием JDBC?
21
22
Этапы работы с базой данных с использованием JDBC:
23
24
# Подключение библиотеки с классом-драйвером базы данных.
25
# Установка соединения с БД.
26
# Создание объекта для передачи запросов.
27
# Выполнение запроса.
28
# Обработка результатов выполнения запроса.
29
# Закрытие соединения, statement.
30
31
h3. Как создать Connection?
32
33
Для установки соединения с БД вызывается статический метод getConnection() класса java.sql.DriverManager. В качестве параметров методу передаються URL базы данных, логин пользователя БД и пароль доступа.
34
Загрузка класса драйвера базы данных при отсутствии ссылки на экземпляр этого класса в JDBC 4.1 происходит автоматически при установке соединения екземпляром DriverManager. Метод возвращает объект Connection. URL базы данных, состоящий из типа и адреса физического расположения БД, может создаваться в виде отдельной строки или извлекаться из файла ресурсов.
35
36
Соответственно:
37
38
{{dmsf_image(235)}}
39
40
В результате будет возвращен объект Connection и будет одно установленное соединение с БД с именем testphones. Класс DriverManager предоставляет средства для управления набором драйверов баз данных.
41
42
h3. Чем отличается Statement от PreparedStatement?
43
44
Объект Statement используется для выполнения SQL-запросов к БД. Существует три типа объектов Statement. Все три служат как бы конейнерами для выполнения SQL-выражений через данное соединение: Statement, PreparedStatement, наследующий от Statement, и CallableStatement, наследующий от PreparedStatement. Они специализируются на различных типах запросов: Statement используется для выполнения простых SQLзапросов без параметров; PreparedStatement используется для выполнения прекомпилированных SQL-запросов с или без входных (IN) параметров; CallableStatement используется для вызовов хранимых процедур. Интерфейс Statement предоставляет базовые методы для выполнения запросов и извлечения результатов. Интерфейс PreparedStatement добавляет методы управления входными (IN) параметрами; CallableStatement добавляет методы для манипуляции выходними (OUT) параметрами. Интерфейс PreparedStatement наследует от Statement и отличается от последнего следующим: Экземпляры PreparedStatement "помнят" скомпилированные SQL-выражения. Именно поэтому они называются "prepared" ("подготовленные").
45
46
SQL-выражения в PreparedStatement могут иметь один или более входной (IN) параметр. Входной параметр - это параметр, чье значение не указывается при создании SQL-выражения. Вместо него в выражении на месте каждого входного параметра ставится знак ("?"). Значение каждого вопросительного знака устанавливается методами setXXX перед выполнением запроса.
47
48
h3. Как вызвать хранимую процедуру?
49
50
Хранимые процедуры – это именованный набор операторов Transact-SQL хранящийся на сервере. Такую процедуру можно легко вызвать из Javaкласса с помощью специального синтаксиса. При вызове такой процедуры необходимо указать ее имя и определить список параметров. Имя и список параметров посылаются по JDBC-соединению в СУБД, которая выполняет вызываемую процедуру и возвращает результат (если таковой имеется) обратно, используя это же соединение. JDBC Java-код для выполнения хранимой процедуры, использующий объект Statement без параметров.
51
52
{{dmsf_image(236)}}
53
54
h3. Как правильно закрыть Connection?
55
56
<pre>
57
st.close();
58
cn.close();
59
</pre>
60
61
После того, как база больше не нужна, соединение закрывается. Для того, чтобы правильно пользоваться приведенными методами, программисту требуется знать типы полей БД. В распределенных системах это знание предполагается изначально. В Java 7 для объектов-ресурсов, требующих закрытия, реализована технология try with resources.
62
63
h3. Какие есть уровни изоляции транзакций?
64
65
Уровни изоляции транзакций определены в виде констант интерфейса Connection (по возрастанию уровня ограничения):
66
67
* *TRANSACTION_NONE* - информирует о том, что драйвер не поддерживает транзакции;
68
* *TRANSACTION_READ_UNCOMMITTED* - позволяет транзакциям видеть несохраненные изменения данных, что разрешает грязное, неповторяющееся и фантомное чтения;
69
* *TRANSACTION_READ_COMMITTED* - означает, что любое изменение, сделанное в транзакции, не видно вне ее, пока она не сохранена. Это предотвращает грязное чтение, но разрешает неповторяющееся и фантомное;
70
* *TRANSACTION_REPEATABLE_READ* - запрещает грязное и неповторяющееся чтение, но фантомное разрешено;
71
* *TRANSACTION_SERIALIZABLE* - определяет, что грязное, неповторяющееся и фантомное чтения запрещены.
72
73
h3. Какие есть типов чтения транзакций?
74
75
Для транзакций существует несколько типов чтения:
76
77
* грязное чтение (dirty reads) происходит, когда транзакциям разрешено видеть несохраненные изменения данных. Иными словами, изменения, сделанные в одной транзакции, видны вне ее до того, как она была сохранена. Если изменения не будут сохранены, то, вероятно, другие транзакции выполняли работу на основе некорректных данных;
78
* неповторяющееся чтение (nonrepeatable reads) происходит, когда транзакция А читает строку, транзакция Б изменяет эту строку, транзакция А читает ту же строку и получает обновленные данные;
79
* фантомное чтение (phantom reads) происходит, когда транзакция А считывает все строки, удовлетворяющие WHERE-условию, транзакция Б вставляет новую или удаляет одну из строк, которая удовлетворяет этому условию, транзакция А еще раз считывает все строки, удовлетворяющие WHERE-условию, уже вместе с новой строкой или недосчитавшись старой.
Go to top