Топ-100Использование хранимых процедур в Java - CodOrbits
LogoCodOrbits

Раздел: JDBC

Научитесь подключаться к базам данных через JDBC, выполнять SQL-запросы и обрабатывать результаты в Java.

Все разделы
Иконка JDBC

Использование хранимых процедур в Java

Last updated: 9 мая 2025 г.

Хранимые процедуры это по сути функции, только вместо java кода sql код и эти функции хранятся в БД.

Для создания этой процедуры в БД, нужно выполнить sql запрос CREATE PROCEDURE…

Давайте создадим две процедуры. Одна будет возвращать параметр, в другую будем передавать параметр.

1#В скобках ниже не входной параметр процедуры,
2#а выходной. OUT обозначает что этот параметр
3#countofbooks будет возвращаться из процедуры.
4CREATE PROCEDURE NumberOfBooks (OUT countofbooks INT)
5BEGIN
6    #Копируем количество строк
7    #в выходной параметр countofbooks.
8    SELECT COUNT(*) INTO countofbooks FROM books;
9END;
10
11#Также важным примером будет создание
12#процедуры, в которую передается параметр.
13#Создадим вторую процедуру.
14CREATE PROCEDURE getBooks (bookId INT)
15BEGIN
16    select * from books where id = bookId;
17END;

Через MySql консоль создадим их в нашей БД:


Работа с хранимыми процедурами с помощью JDBC

Для использования процедур важно рассмотреть CallableStatement и sql escape последовательности.

Если PreparedStatement предоставлял методы для управления входящими параметрами то CallableStatement для исходящих.

CallableStatement используется для вызова хранимых процедур и манипуляции выходными параметрами процедуры.

Sql escape последовательности являют собой часть sql запроса, которая выполняет какие-то действия. Например, вызов процедуры с помощью {call bookCount(?)}.

Пример программы:

1import java.sql.*;
2
3public class Procedures {
4    public static void main(String[] args)
5        throws ClassNotFoundException, SQLException {
6        Class.forName("com.mysql.cj.jdbc.Driver");
7        Connection connection = DriverManager.getConnection(
8            "jdbc:mysql://localhost/storage",
9            "root", "07998MSD");
10
11        //используем первую процедуру.
12
13        //В ней можно увидеть escape последовательность.
14        //Здесь call для вызова указанной процедуры.
15        CallableStatement cstatement =
16            connection.prepareCall("{call NumberOfBooks(?)}");
17        //Теперь сообщаем JDBC драйверу
18        //какой параметр будет на выходе
19        //процедуры. В нашем случае INTEGER.
20        cstatement.registerOutParameter(1, Types.INTEGER);
21        //выполнить процедуру
22        cstatement.execute();
23        //Выведем на консоль значение первого
24        //параметра процедуры.
25        System.out.println(cstatement.getInt(1));
26
27        //используем вторую процедуру.
28
29        CallableStatement cstatement2 =
30            connection.prepareCall("{call getBooks(?)}");
31        //Можем передать параметр в процедуру.
32        //Передаем единицу на место первого вопросика
33        cstatement2.setInt(1, 1);
34        //выполнить процедуру
35        cstatement2.execute();
36        //получить результат процедуры
37        ResultSet presultSet = cstatement2.getResultSet();
38        while (presultSet.next()) {
39            int id = presultSet.getInt("id");
40            String name = presultSet.getString("name");
41            String author = presultSet.getString("author");
42
43            System.out.println("\n=================\n");
44            System.out.println("id: " + id);
45            System.out.println("name: " + name);
46            System.out.println("author: " + author);
47        }
48
49        System.out.println("Closing connection and "
50            +"releasing resources…");
51        presultSet.close();
52        cstatement.close();
53        cstatement2.close();
54        connection.close();
55    }
56}

Вывод:

Видим, что первая процедура выполнилась успешно – 5 записей в таблице с книгами. Вторая процедура тоже успешно вывела книгу с id = 1.


Следующие уроки

Что такое HTML и зачем он нужен

10
мин.

Similar Articles Icon
Divider

Ключевые теги HTML

9
мин.

Similar Articles Icon
Divider

Атрибуты в HTML

8
мин.

Similar Articles Icon