Savepoint в JDBC транзакциях

Класс SavePoint необходим для того, чтобы rollback был применен с определенной строки кода по определенную строку кода.

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

import java.sql.*; public class TransSaveP { 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”, “07031998MSD”); Statement statement = connection.createStatement(); connection.setAutoCommit(false); statement.executeUpdate(“INSERT INTO books ” +”(name,author) VALUES (‘Book1’, ‘Author1’);”); statement.executeUpdate(“INSERT INTO books ” +”(name,author) VALUES (‘Book2’, ‘Author2’);”); Savepoint savep = connection.setSavepoint(); try { statement.executeUpdate(“INSERT INTO books ” +”(name,author) VALUES (‘Book3’, ‘Author3’);”); statement.executeUpdate(“INSERT INTO books ” +”(name,author) VALUES (‘Book4’, ‘Author4’);”); //на запросе ниже случится ошибка и переход в catch statement.executeUpdate(“INSERT INTO books (name,” +”author) VALUES (‘Book5’, ‘Author5’, ‘str’);”); connection.commit(); } catch (SQLException e) { //Отменяются только //запросы выполненные после создания savep, //запросы до него не будут отменены connection.rollback(savep); //То есть в данном примере будут отменены //только третий и четвертый запрос. //То есть те, которые до ошибки //и которые после savep //Чтобы выполнились команды //до создания savep вызываем commit connection.commit(); } statement.close(); connection.close(); } }

Скомпилируем, запустим программу и проверим таблицу books через MySQL консоль:

Видим, что случились только первый и второй запросы. То есть те, которые до savep. Всё после savep роллбекнулись.

Изоляция транзакций. Грязное чтение

Узнайте, что такое грязное чтение в транзакциях SQL и JDBC. Разберитесь с уровнями изоляции TRANSACTION_READ_COMMITTED и TRANSACTION_READ_UNCOMMITTED на практических примерах.
Time to read: 15

Изоляция транзакций. Неповторяющееся чтение

Объяснение неповторяющегося чтения в JDBC. Используйте TRANSACTION_REPEATABLE_READ для согласованности данных между SELECT-запросами.
Time to read: 15

Изоляция транзакций. Фантомное чтение

Разберитесь с фантомным чтением в транзакциях JDBC. Как TRANSACTION_SERIALIZABLE предотвращает вставку данных во время выполнения запросов.
Time to read: 14