Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a0e03be

Browse files
Add files and folders ConnectLessTwo of JDBC Practice.
1 parent 76a4200 commit a0e03be

File tree

2 files changed

+131
-0
lines changed

2 files changed

+131
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
Пример создания соединения с базой данных через
3+
самописный "утилитный" класс ConnectionManager.
4+
5+
При этом не забываем подключить в настройках
6+
драйвер соединения с базой данных (*.jar),
7+
который лежит в папке lib проекта JDBCLessonOne,
8+
иначе словим исключение.
9+
*/
10+
import connection_util.ConnectionManager;
11+
12+
import java.sql.Connection;
13+
import java.sql.SQLException;
14+
15+
public class JDBCLessTwoApp {
16+
17+
public static void main(String[] args) {
18+
19+
try (Connection connection = ConnectionManager.getBaseConnection()) {
20+
/*
21+
В стандарте SQL описывается четыре уровня изоляции транзакций:
22+
— Read uncommited (Чтение незафиксированных данных),
23+
- Read committed (Чтение зафиксированных данных),
24+
- Repeatable read (Повторяемое чтение),
25+
- Serializable (Сериализуемость).
26+
27+
*** 4 свойства транзакций ***
28+
29+
Основные требования к транзакционной системе:
30+
- Atomicity (атомарность) — выражается в том, что транзакция должна быть
31+
выполнена в целом или не выполнена вовсе.
32+
- Consistency (согласованность) — гарантирует, что по мере выполнения транзакций,
33+
данные переходят из одного согласованного
34+
состояния в другое, то есть транзакция не может
35+
разрушить взаимной согласованности данных.
36+
- Isolation (изолированность) — локализация пользовательских процессов означает,
37+
что конкурирующие за доступ к БД транзакции
38+
физически обрабатываются последовательно,
39+
изолированно друг от друга, но для пользователей
40+
это выглядит, как будто они выполняются параллельно.
41+
- Durability (долговечность) — устойчивость к ошибкам — если транзакция завершена
42+
успешно, то те изменения в данных, которые были ею
43+
произведены, не могут быть потеряны ни при каких
44+
обстоятельствах.
45+
46+
В данной ситуации мы смотрим уровень изоляции транзакций нашей базы.
47+
*/
48+
System.out.println(connection.getTransactionIsolation());
49+
System.out.println(connection.getCatalog());
50+
} catch (SQLException e) {
51+
throw new RuntimeException(e);
52+
}
53+
}
54+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package connection_util;
2+
3+
import java.sql.Connection;
4+
import java.sql.DriverManager;
5+
import java.sql.SQLException;
6+
7+
public final class ConnectionManager {
8+
// Логин для подключения к базе данных
9+
private static String LOGIN = "postgres";
10+
// Пароль для подключения к базе данных
11+
private static String PASS = "testadmin";
12+
// Адрес для подключения к базе данных, обычно можно взять из настроек соединения IDE и базы.
13+
private static String BASEURL = "jdbc:postgresql://localhost:5432/flight_repository";
14+
15+
static {
16+
// Загружаем наш PostgreSQL драйвер
17+
loadDriver();
18+
}
19+
/*
20+
Приватный конструктор данного класса
21+
*/
22+
private ConnectionManager() {
23+
}
24+
/*
25+
Нам нужно получить соединение с базой данных, т.е. экземпляр
26+
класса Connection, это можно сделать, как и в прошлый раз через
27+
перегруженный метод *.getConnection(), класса DriverManager.
28+
*/
29+
public static Connection getBaseConnection() {
30+
try {
31+
/*
32+
DriverManager.getConnection(DB_URL, DB_USER_NAME, DB_USER_PASSWORD) –
33+
устанавливаем соединение с СУБД. По переданному адресу, JDBC сама
34+
определит тип и местоположение нашей СУБД и вернёт Connection, который
35+
мы можем использовать для связи с БД.
36+
*/
37+
return DriverManager.getConnection(BASEURL, LOGIN, PASS);
38+
} catch (SQLException e) {
39+
throw new RuntimeException(e);
40+
}
41+
}
42+
43+
private static void loadDriver() {
44+
try {
45+
/*
46+
Метод forName() класса java.lang.Class возвращает объект Class,
47+
связанный с классом или интерфейсом с заданным строковым именем.
48+
Вызов этого метода эквивалентен:
49+
50+
Class.forName(className, true, currentLoader)
51+
52+
, где currentLoader обозначает определяющий загрузчик класса текущего
53+
класса. Например, следующий фрагмент кода возвращает дескриптор класса
54+
среды выполнения для класса с именем java.lang.Thread:
55+
56+
Class t = Class.forName("java.lang.Thread")
57+
58+
Вызов forName("XYZ") приводит к инициализации класса с именем XYZ.
59+
60+
Параметры: className — полное имя вызываемого класса.
61+
Возвращает: объект Class для класса с указанным именем.
62+
63+
Исключения:
64+
- LinkageError - если связь не удалась
65+
- ExceptionInInitializerError - если инициализация, спровоцированная
66+
этим методом, не удалась.
67+
- ClassNotFoundException - если класс не может быть расположен
68+
69+
В нашем случае метод Class.forName загружает класс драйвера,
70+
который мы будем использовать.
71+
*/
72+
Class.forName("org.postgresql.Driver");
73+
} catch (ClassNotFoundException e) {
74+
throw new RuntimeException(e);
75+
}
76+
}
77+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /