Un objeto Savepoint se utiliza para guardar el estado actual de la base de datos que luego se puede revertir a ese estado de la base de datos. Los puntos de guardado son similares a las transacciones SQL y generalmente se revierten si algo sale mal dentro de la transacción actual. El método connection.setSavepoint() de la interfaz Connection en Java se usa para crear un objeto que hace referencia a un estado actual de la base de datos dentro de la transacción. El siguiente ejemplo muestra el uso de Savepoint y Rollback en la aplicación JDBC .
sintaxis
connection.setSavepoint()
Devoluciones: Devuelve un nuevo objeto Savepoint .
Excepciones: se genera SQLException si se produce un error de acceso a la base de datos, se llama a este método mientras se participa en una transacción distribuida, se llama a este método en una conexión cerrada o este objeto de conexión se encuentra actualmente en modo de confirmación automática. Se genera una excepción SQLFeatureNotSupportedException si el controlador JDBC no es compatible con este método.
Ejemplo
Java
// Java program to demonstrate how to make a save point import java.io.*; import java.sql.*; class GFG { public static void main(String[] args) { // db credentials String jdbcEndpoint = "jdbc:mysql://localhost:3000/GEEKSFORGEEKS"; String userid = "GFG"; String password = "GEEKSFORGEEKS"; // create a connection to db Connection connection = DriverManager.getConnection( jdbcEndpoint, userid, password); // construct a query Statement deleteStmt = connection.createStatement(); String deleteQuery = "DELETE FROM USER WHERE AGE > 15"; // Disable auto commit to connection connection.setAutoCommit(false); /* Table USER +--------+---------+------------+ | USR_ID | NAME | AGE | +--------+---------+------------+ | 1 | GFG_1 | 10 | | 2 | GFG_2 | 20 | | 3 | GFG_3 | 25 | +--------+---------+------------+ */ // Create a savepoint object before executing the // deleteQuery Savepoint beforeDeleteSavepoint = connection.setSavepoint(); // Executing the deleteQuery ResultSet res = deleteStmt.executeQuery(deleteQuery); /* Table USER after executing deleteQuery +--------+---------+------------+ | USR_ID | NAME | AGE | +--------+---------+------------+ | 1 | GFG_1 | 10 | +--------+---------+------------+ */ // Rollback to our beforeDeleteSavepoint connection.rollback(beforeDeleteSavepoint); connection.commit(); /* Table USER after rollback +--------+---------+------------+ | USR_ID | NAME | AGE | +--------+---------+------------+ | 1 | GFG_1 | 10 | | 2 | GFG_2 | 20 | | 3 | GFG_3 | 25 | +--------+---------+------------+ */ } }