Бесплатный курс по Java: от основ до продвинутого уровня
Использование хранимых процедур в Java
Хранимые процедуры это по сути функции, только вместо java кода sql коди эти функции хранятся в БД.
Для создания этой процедуры в БД, нужно выполнить sql запрос CREATE PROCEDURE…
Давайте создадим две процедуры. Одна будет возвращать параметр, в другую будем передавать параметр.
#В скобках ниже не входной параметр процедуры,
#а выходной. OUT обозначает что этот параметр
#countofbooks будет возвращаться из процедуры.
CREATE PROCEDURE NumberOfBooks (OUT countofbooks INT)
BEGIN
#Копируем количество строк
#в выходной параметр countofbooks.
SELECT COUNT(*) INTO countofbooks FROM books;
END;
#Также важным примером будет создание
#процедуры, в которую передается параметр.
#Создадим вторую процедуру.
CREATE PROCEDURE getBooks (bookId INT)
BEGIN
select * from books where id = bookId;
END;
Через MySql консоль создадим их в нашей БД:
Работа с хранимыми процедурами с помощью JDBC
Для использования процедур важно рассмотреть CallableStatement и sql escape последовательности.
Если PreparedStatement предоставлял методы для управления входящими параметрами то CallableStatement для исходящих.
CallableStatement используется для вызова хранимых процедур и манипуляции выходными параметрами процедуры.
Sql escapeпоследовательности являют собой часть sql запроса,которая выполняет какие-то действия. Например, вызов процедуры с помощью {call bookCount(?)}.
Пример программы:
import java.sql.*;
public class Procedures {
public static void main(String[] args)
throws ClassNotFoundException, SQLException {
Class.forName(“com.mysql.cj.jdbc.Driver”);
Connection connection = DriverManager.getConnection(
“jdbc:mysql://localhost/storage”,
“root”, “07998MSD”);
//используем первую процедуру.
//В ней можно увидеть escape последовательность.
//Здесь call для вызова указанной процедуры.
CallableStatement cstatement =
connection.prepareCall(“{call NumberOfBooks(?)}”);
//Теперь сообщаем JDBC драйверу
//какой параметр будет на выходе
//процедуры. В нашем случае INTEGER.
cstatement.registerOutParameter(1, Types.INTEGER);
//выполнить процедуру
cstatement.execute();
//Выведем на консоль значение первого
//параметра процедуры.
System.out.println(cstatement.getInt(1));
//используем вторую процедуру.
CallableStatement cstatement2 =
connection.prepareCall(“{call getBooks(?)}”);
//Можем передать параметр в процедуру.
//Передаем единицу на место первого вопросика
cstatement2.setInt(1, 1);
//выполнить процедуру
cstatement2.execute();
//получить результат процедуры
ResultSet presultSet = cstatement2.getResultSet();
while (presultSet.next()) {
int id = presultSet.getInt(“id”);
String name = presultSet.getString(“name”);
String author = presultSet.getString(“author”);
System.out.println(“\n=================\n”);
System.out.println(“id: ” + id);
System.out.println(“name: ” + name);
System.out.println(“author: ” + author);
}
System.out.println(“Closing connection and ”
+”releasing resources…”);
presultSet.close();
cstatement.close();
cstatement2.close();
connection.close();
}
}
Вывод:
Видим, что первая процедура выполнилась успешно – 5 записей в таблице с книгами. Вторая процедура тоже успешно вывела книгу с id = 1.
Основные HTML-теги: DOCTYPE, заголовки (h1-h6), таблицы, изображения и формы. Практические примеры верстки с тегами table, img, form и атрибутами.
Time to read: 9
Атрибуты в HTML
Изучите HTML-атрибуты: width, height, align и другие. Узнайте, как настраивать элементы страницы, центрировать контент и управлять размерами с примерами кода.