Criando savepoints para conexões de banco de dados usando JDBC

Criar savepoints é um comportamento bastante comum quando existem muitas transações no banco de dados. Com isso, em caso de erro ou execessão, é possível fazer um rollback dessas transações com a ajuda dos savepoints.

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(125);
            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();
        }
    }
};