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