Creation of savepoint is very useful when there are many nested database transactions. At the time of an error or exception, we can rollback the transaction with the help of savepoints.

The example below creates a savepoint and rollbacks transaction when a condition is met.

 import java.sql.*;

public class testSavePoint 
{
    public static void main(String[] args) 
    {
        DB db = new DB();
        Connection conn=db.dbConnect(
    "jdbc:jtds:sqlserver://localhost:1433/tempdb","sa","");
        db.performSavePoint(conn);
    }
}

class DB
{
    public DB() {}

    public Connection dbConnect(String db_connect_string, 
  String db_userid, String db_password)
    {
        try
        {
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
            Connection conn = DriverManager.getConnection(
    db_connect_string, db_userid, db_password);
            System.out.println("connected");
            return conn;
            
        }
        catch (Exception e)
        {
            e.printStackTrace();
            return null;
        }
    }

    public void performSavePoint(Connection conn)
    {
        try
        {
            conn.setAutoCommit(false);

            String query = 
    "select id,name,category,age from customer where age > ?";
            String update = "update customer set age = ? where id = ?";

            PreparedStatement pstmt1 = conn.prepareStatement(query);
            PreparedStatement pstmt2 = conn.prepareStatement(update);

            pstmt1.setInt(1, 25);
            ResultSet rs = pstmt1.executeQuery();

            Savepoint save1 = conn.setSavepoint();
            while (rs.next())  
            {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String category = rs.getString("category");
                int age = rs.getInt("age");
                int newage = age + 5;
                pstmt2.setInt(1, newage);
                pstmt2.setInt(2, id);
                pstmt2.executeUpdate();
                if (newage > 39) 
                {
                    conn.rollback(save1);
                }

            }
            conn.commit();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
};