There are some situations when you have to only rollback() to some specific statement and not all statements in a transaction. This can be achieved by introducing some labels to the statements in the transactions. These labels are known as savepoints. The JDBC 3.0 API adds the method Connection.setSavepoint, which sets a savepoint within the current transaction. The Connection.rollback method has been overloaded to take a savepoint argument.


 


The following example will demonstrate how do we use savepoints to handle the transactions more effectively.


 


Note:- The program will not change any data as the commit() is called after rollback().


 


package com.visualbuilder;


 


import java.sql.Connection;


import java.sql.DriverManager;


import java.sql.Savepoint;


import java.sql.Statement;


 


public class SavepointExample {


    public static void main(String[] args) {


        try {


            /** Loading the driver*/


                Class.forName("com.mysql.jdbc.Driver");


            /** Getting Connection*/


                                Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");


            /** Creating Statement*/


                                con.setAutoCommit(false);


                                Statement stmt= con.createStatement();


                                stmt.execute("insert into visualbuilder (id,name)values(10,'test')");


            // set savepoint


                                Savepoint savepoint1 = con.setSavepoint("SAVEPOINT_1");


                                stmt.execute("delete from visualbuilder");


                                System.out.println("rollback to savepoint called ");


                                con.rollback(savepoint1);


                                con.commit();


                                con.close();


                } catch (Exception e){


                    e.printStackTrace();


                }


        }


}


Output:-


rollback to savepoint called.



                    

Copyright © 2008 VisualBuilder. All rights reserved