Wednesday 1 October 2014

Rollback to savepoint

java.sql.Connection interface provides rollback method to rollback to savepoint.

void rollback(Savepoint savepoint) throws SQLException
Undoes all changes made after the given savepoint object was set.

Step 1: Disable auto commit mode.
   Ex:
   Connection conn = getConnection();
   conn.setAutoCommit(false);

Step 2: Create a savepoint
   Ex: Savepoint s1 = conn.setSavepoint();

Step 3: Call the rollback method to the save point
   Ex : conn.rollback(s1);

/* Step 1: Import sql package */
import java.sql.*;

public class SampleApp {
    
    /* Update username, password and driver details here */
    static Connection getConnection() throws ClassNotFoundException, SQLException{
         /* Step 2: Load Driver */
        System.out.println("Loading/Registering driver");  
       
        Class.forName("com.mysql.jdbc.Driver");
         
        /* Step 3: Open connection to database */
        System.out.println("Connecting to database");
        String url = "jdbc:mysql://localhost/world";
        String userName = "root";
        String pasword = "tiger";
        return DriverManager.getConnection(url, userName, pasword);
    }
    
    public static void main(String args[]) throws SQLException, ClassNotFoundException{
        
        Connection conn = getConnection();
        conn.setAutoCommit(false);
          /* Create table employee */
        String query = "CREATE TABLE employee (id int, name varchar(30), PRIMARY KEY(id))";
        Statement stmt = conn.createStatement();
        stmt.execute(query);     
        
        /* Insert data to employee table */
        query = "INSERT INTO employee values(1, \"Krishna\")";
        stmt.execute(query);
        query = "INSERT INTO employee values(2, \"Arjun\")";
        stmt.execute(query);
        
        /* Creating a savepoint */
        Savepoint s1 = conn.setSavepoint();
        
        query = "INSERT INTO employee values(3, \"Joel\")";
        stmt.execute(query);
        
        System.out.println("Calling roll back operation");
        
        conn.rollback(s1);
        
        query = "SELECT * FROM employee";
        ResultSet rs = stmt.executeQuery(query);
        
        while(rs.next()){
            int id  = rs.getInt("id");
            String name = rs.getString("name");
            System.out.println(id +" " + name);
        }
        System.out.println("Dropping table employee");
        query = "DROP TABLE employee";
        stmt.execute(query);
        
 rs.close();
        stmt.close();
        conn.close();
    }
}

Output
Loading/Registering driver
Connecting to database
Calling roll back operation
1 Krishna
2 Arjun
Dropping table employee




Prevoius                                                 Next                                                 Home

No comments:

Post a Comment