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