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 de2affb

Browse files
Add files and folders SqlOperationLess of JDBC Practice.
1 parent b0c62c7 commit de2affb

11 files changed

+962
-0
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
db.url=jdbc:postgresql://localhost:5432/flight_repository
2+
db.username=postgres
3+
db.password=testadmin
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
Пример создания SQL запроса и отправки его в
3+
базу данных.
4+
5+
При этом не забываем подключить в настройках
6+
драйвер соединения с базой данных (*.jar),
7+
который лежит в папке 'lib' проекта 'JDBCLessonOne',
8+
иначе словим исключение. Не забываем пометить
9+
папку 'resources', как ресурсную.
10+
*/
11+
import connection_util.ConnectionManager;
12+
13+
import java.sql.Connection;
14+
import java.sql.SQLException;
15+
import java.sql.Statement;
16+
17+
public class SQLOperationApp_1 {
18+
19+
public static void main(String[] args) {
20+
// Создаем схему 'train_base' в базе 'flight_repository'
21+
String create_schema = """
22+
CREATE SCHEMA IF NOT EXISTS train_base;
23+
""";
24+
// Создаем таблицу 'info' в схеме 'train_base'
25+
String create_table = """
26+
CREATE TABLE IF NOT EXISTS train_base.info (
27+
id SERIAL PRIMARY KEY ,
28+
data TEXT NOT NULL
29+
);
30+
""";
31+
/*
32+
В блоке try-with-resources создаем соединение с базой,
33+
и создаем объект Statement для отправки SQL операторов
34+
(запросов) в базу данных.
35+
*/
36+
try (Connection connection = ConnectionManager.getBaseConnection();
37+
Statement statement = connection.createStatement()) {
38+
/*
39+
Отправляем запрос в базу данных. Метод *.execute()
40+
возвращает состояние true/false в случае успешного
41+
или нет проведения операции.
42+
*/
43+
boolean execute_res_1 = statement.execute(create_schema);
44+
System.out.println(execute_res_1);
45+
46+
boolean execute_res_2 = statement.execute(create_table);
47+
System.out.println(execute_res_2);
48+
} catch (SQLException e) {
49+
throw new RuntimeException(e);
50+
}
51+
}
52+
}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
/*
2+
Пример создания SQL запроса и отправки его в
3+
базу данных:
4+
- Заполним уже созданные таблицы данными 'INSERT';
5+
- Создадим новые таблицы и заполним их данными 'CREATE';
6+
- Сделаем это каскадом в одном *.execute();
7+
- Посмотрим как работает *.executeUpdate();
8+
9+
При этом не забываем подключить в настройках
10+
драйвер соединения с базой данных (*.jar),
11+
который лежит в папке 'lib' проекта 'JDBCLessonOne',
12+
иначе словим исключение. Не забываем пометить
13+
папку 'resources', как ресурсную.
14+
*/
15+
import connection_util.ConnectionManager;
16+
17+
import java.sql.Connection;
18+
import java.sql.SQLException;
19+
import java.sql.Statement;
20+
21+
public class SQLOperationApp_2 {
22+
23+
public static void main(String[] args) {
24+
/*
25+
Заполняем таблицу 'train_base.info' в базе 'flight_repository'
26+
данными. Мы можем отправлять сразу несколько запросов одновременно.
27+
28+
Создадим еще и таблицу 'train_base.route' и тут же
29+
добавим данных в созданную таблицу.
30+
*/
31+
String insert_data = """
32+
DELETE FROM train_base.info;
33+
34+
INSERT INTO train_base.info (data)
35+
VALUES
36+
('Test_data_1'),
37+
('Test_data_2'),
38+
('Test_data_3'),
39+
('Test_data_4');
40+
41+
42+
CREATE TABLE IF NOT EXISTS train_base.route (
43+
id SERIAL PRIMARY KEY ,
44+
name_of_route CHAR(128) NOT NULL
45+
);
46+
47+
DELETE FROM train_base.route;
48+
49+
INSERT INTO train_base.route (name_of_route)
50+
VALUES
51+
('Калинов мост - Замок Кощея'),
52+
('Тридевятое царство - Коряжье болото'),
53+
('Лукоморье - Остров Буян'),
54+
('ИЗНАКУРНОЖ - ЛОЗМЕГОР');
55+
""";
56+
/*
57+
Создаем таблицу 'train_stop' в схеме 'train_base'
58+
с автоинкрементируемым id и символьным полем
59+
'name_of_stop'
60+
61+
Вторым запросом заполняем вновь созданную таблицу
62+
*/
63+
String create_table_insert_data = """
64+
CREATE TABLE IF NOT EXISTS train_base.train_stop
65+
(
66+
id SERIAL PRIMARY KEY ,
67+
name_of_stop CHAR(256) NOT NULL
68+
);
69+
70+
DELETE FROM train_base.train_stop;
71+
72+
INSERT INTO train_base.train_stop (name_of_stop)
73+
VALUES
74+
('Калинов мост'),
75+
('Пень Водяного'),
76+
('Руины замка Кощея'),
77+
('Клевые закутки');
78+
""";
79+
/*
80+
В блоке try-with-resources создаем соединение с базой,
81+
и создаем объект Statement для отправки SQL операторов
82+
(запросов) в базу данных.
83+
*/
84+
try (Connection connection = ConnectionManager.getBaseConnection();
85+
Statement statement = connection.createStatement()) {
86+
/*
87+
Отправляем запрос в базу данных.
88+
*/
89+
boolean execute_res_1 = statement.execute(insert_data);
90+
// Проверяем результат работы метода
91+
System.out.println(execute_res_1);
92+
// Уточняем, сколько строк было обновлено
93+
System.out.println(statement.getUpdateCount());
94+
/*
95+
На практике можно использовать метод *.executeUpdate()
96+
для получения результата операций
97+
*/
98+
int execute_res_2 = statement.executeUpdate(create_table_insert_data);
99+
System.out.println(execute_res_2);
100+
} catch (SQLException e) {
101+
throw new RuntimeException(e);
102+
}
103+
}
104+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/*
2+
Пример создания SQL запроса и отправки его в
3+
базу данных:
4+
- Изменим уже созданные таблицы данными 'UPDATE';
5+
- Получим результат изменений 'RETURNING';
6+
7+
!!! Нужно помнить разницу между (возвращаемые данные):
8+
9+
- boolean execute(String sql) - Выполняет запрос SQL,
10+
который может возвращать несколько результатов.
11+
12+
- ResultSet executeQuery(String sql) - Выполняет
13+
запрос SQL, который возвращает один объект ResultSet.
14+
15+
- int executeUpdate(String sql) - Выполняет запрос SQL,
16+
который может быть оператором INSERT, UPDATE или DELETE
17+
или оператором SQL, который ничего не возвращает, например
18+
оператором SQL DDL.
19+
20+
При этом не забываем подключить в настройках
21+
драйвер соединения с базой данных (*.jar),
22+
который лежит в папке 'lib' проекта 'JDBCLessonOne',
23+
иначе словим исключение. Не забываем пометить
24+
папку 'resources', как ресурсную.
25+
*/
26+
import connection_util.ConnectionManager;
27+
28+
import java.sql.Connection;
29+
import java.sql.SQLException;
30+
import java.sql.Statement;
31+
32+
public class SQLOperationApp_3 {
33+
34+
public static void main(String[] args) {
35+
/*
36+
Обновим наши таблицы
37+
*/
38+
String update_data = """
39+
UPDATE train_base.info
40+
SET data = 'Not_test_data_UPDATE'
41+
WHERE id = 2;
42+
43+
UPDATE train_base.route
44+
SET name_of_route = 'Лысая Гора - Мертвый Родник'
45+
WHERE name_of_route = 'Лукоморье - Остров Буян';
46+
""";
47+
/*
48+
Обновим таблицу и вернем результат 'RETURNING'
49+
*/
50+
String update_data_2 = """
51+
INSERT INTO train_base.train_stop (name_of_stop)
52+
VALUES
53+
('Калинов Мост');
54+
55+
UPDATE train_base.train_stop
56+
SET name_of_stop = 'Медная Гора'
57+
WHERE name_of_stop = 'Калинов Мост'
58+
RETURNING *;
59+
""";
60+
/*
61+
В блоке try-with-resources создаем соединение с базой,
62+
и создаем объект Statement для отправки SQL операторов
63+
(запросов) в базу данных.
64+
*/
65+
try (Connection connection = ConnectionManager.getBaseConnection();
66+
Statement statement = connection.createStatement()) {
67+
/*
68+
Отправляем запрос в базу данных. Используем метод
69+
*.executeUpdate() для получения результата операций;
70+
*/
71+
int execute_res = statement.executeUpdate(update_data);
72+
System.out.println(execute_res);
73+
74+
/*
75+
Если в запросе мы используем RETURNING, то на выходе
76+
получаем строки (поля в которых произошли изменения)
77+
*/
78+
boolean execute_res_2 = statement.execute(update_data_2);
79+
System.out.println(execute_res_2);
80+
System.out.println(statement.getUpdateCount());
81+
} catch (SQLException e) {
82+
throw new RuntimeException(e);
83+
}
84+
}
85+
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/*
2+
Пример создания SQL запроса и отправки его в
3+
базу данных:
4+
- Заполним уже созданные таблицы данными 'SELECT';
5+
6+
!!! Нужно помнить разницу между (возвращаемые данные):
7+
8+
- boolean execute(String sql) - Выполняет запрос SQL,
9+
который может возвращать несколько результатов.
10+
11+
- ResultSet executeQuery(String sql) - Выполняет
12+
запрос SQL, который возвращает один объект ResultSet.
13+
14+
- int executeUpdate(String sql) - Выполняет запрос SQL,
15+
который может быть оператором INSERT, UPDATE или DELETE
16+
или оператором SQL, который ничего не возвращает, например
17+
оператором SQL DDL.
18+
19+
При этом не забываем подключить в настройках
20+
драйвер соединения с базой данных (*.jar),
21+
который лежит в папке 'lib' проекта 'JDBCLessonOne',
22+
иначе словим исключение. Не забываем пометить
23+
папку 'resources', как ресурсную.
24+
*/
25+
import connection_util.ConnectionManager;
26+
27+
import java.sql.Connection;
28+
import java.sql.ResultSet;
29+
import java.sql.SQLException;
30+
import java.sql.Statement;
31+
32+
public class SQLQueryApp_4 {
33+
34+
public static void main(String[] args) throws SQLException{
35+
/*
36+
Запрашиваем все данные из таблицы 'ticket' схемы
37+
'flight_repository', которую создали на уроке
38+
'ConnectLessOne' пример скриптов лежит в папке 'base'
39+
*/
40+
String sql_query = """
41+
SELECT *
42+
FROM flight_repository.ticket
43+
""";
44+
/*
45+
В блоке try-with-resources создаем соединение с базой,
46+
и создаем объект Statement для отправки SQL операторов
47+
(запросов) в базу данных.
48+
*/
49+
try (Connection connection = ConnectionManager.getBaseConnection();
50+
/*
51+
TYPE_SCROLL_INSENSITIVE - Константа, указывающая тип объекта ResultSet,
52+
который можно прокручивать, но обычно не
53+
чувствителен к изменениям данных, лежащих в
54+
основе ResultSet.
55+
56+
Т.е. мы можем свободно перемещаться по нашему
57+
полученному SET-у и вверх и вниз, а не только
58+
в одну сторону например FETCH_FORWARD.
59+
60+
И можем использовать методы для установки курсора:
61+
*.afterLast(), *.last(), *.beforeFirst(), *.first()
62+
и т.д. Например: executeResult.last()
63+
64+
CONCUR_UPDATABLE - Константа, указывающая режим параллелизма для объекта
65+
ResultSet, который может быть обновлен.
66+
67+
Т.е. мы можем используя методы *.update...() производить
68+
изменения в таблицах базы данных.
69+
Например: executeResult.updateLong("id", 1000);
70+
*/
71+
Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
72+
ResultSet.CONCUR_UPDATABLE))
73+
{
74+
/*
75+
Отправляем запрос в базу данных. Используем метод
76+
*.executeQuery() для получения результата операций.
77+
Возвращен будет объект ResultSet (см. документацию
78+
папка DOC проекта)
79+
*/
80+
ResultSet executeResult = statement.executeQuery(sql_query);
81+
/*
82+
boolean next() - Перемещает курсор на одну строку вперед от его
83+
текущей позиции. Только после того, как мы
84+
перевели курсор, мы можем читать данные за
85+
курсором.
86+
87+
В данном случае мы в цикле пробегаем по данным полученным
88+
из запроса, получаем значения отдельных полей таблицы и
89+
выводим их на экран.
90+
*/
91+
System.out.println("****** Результат SQL запроса ******");
92+
while (executeResult.next()) {
93+
System.out.println(executeResult.getLong("id"));
94+
System.out.println(executeResult.getString("passenger_no"));
95+
System.out.println(executeResult.getBigDecimal("cost"));
96+
System.out.println("*************************************");
97+
}
98+
}
99+
}
100+
}

0 commit comments

Comments
(0)

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