Java의 여러 테이블에 데이터를 삽입하려고합니다. 삽입이 1 개의 테이블에서 실패하면 모든 테이블의 데이터를 롤백해야합니다. 그러나 어떤 이유로 데이터가 2 개의 테이블에 삽입되고 그 중 하나에 삽입되지 않습니다. 테이블 중 하나에서 삽입이 실패 했으므로 다른 테이블에 삽입하지 않아야합니다. 삽입 방법여러 삽입이있는 Java 트랜잭션이 롤백되지 않습니다.
try {
conn.setAutoCommit(false);
dbConnector.insertA(myList1, conn);
dbConnector.insertB(myList2, conn);
dbConnector.insertC(myList3, conn);
conn.commit();
} catch(SQLException e) {
try {
conn.rollback();
e.printStackTrace();
}
...
}
그리고 내부 : 이것은 내 코드는 모습입니다
public void insertA(List<MyClass> myList1, Connection conn){
String myQuery = "INSERT INTO TABLE (colA, colB, colC) VALUES(?,?,?);";
PreparedStatement statement = conn.prepareStatement(myQuery);
for (MyClass mc : myList1) {
statement.setString(1, mc.getA());
statement.setString(2, mc.getB());
statement.setString(3, mc.getC());
statement.addBatch();
}
statement.executeBatch();
statement.close();
conn.close();
...
}
참고 : insertB
및 insertC
방법 insertA
와 같은 패턴을 따른다.
어디서 잘못 되었나요? 어떤 도움이라도 대단히 감사하겠습니다.
commit() 또는 rollback()을 호출하기 전에 연결을 닫지 않아야합니다. 일부 데이터베이스는이 경우 암시 적으로 커밋 될 수 있습니다. – user3714601
코드가 맞다면'conn.close();'내부의'insertA'는 완전히 예상치 못한 것입니다. –