[英]Java: Rollback Database updates?
我有三種方法可以將節點保存到數據庫中。 當前,除非所有寫入成功,否則無法實現不提交更改的預期效果。
conn.setAutoCommit(false);
writeNodeTable(node, newNodeNID);
writeContentTypeBoutTable(node, newNodeNID);
writeTerms(node, newNodeNID);
conn.commit();
如果第二個或第三個方法有問題(例如引發未捕獲的異常),我想回滾所有更改。 有什么方法可以使用事務來完成此操作?
這是一種這樣的數據庫編寫功能:
private void writeTerms(DrupalNode node, int newNodeNID) throws SQLException {
String sql = "INSERT INTO term_node (nid, vid, tid) VALUES (?, ?, ?)";
PreparedStatement prep = conn.prepareStatement(sql);
prep.setInt(1, newNodeNID);
prep.setInt(2, newNodeNID);
String schoolName = termHelp.schoolOfAgainst(node.get(BoutField.against));
prep.setString(3, schoolName);
prep.execute();
String fencerName = termHelp.fencerOfAgainst(node.get(BoutField.against));
prep.setString(3, fencerName);
prep.execute();
prep.close();
}
Upul是正確的,您需要實現Connection.setAutoCommit(false)
和Connection.rollback()
方法。 您可能想為每個事務嘗試的一件事就是具有這種流程:
Connection conn = null; // or have the connection sent in
try {
conn = getConnection(username, password);
conn.setAutoCommit(false);
// do stuff with connection
conn.commit();
} catch (SQLException sqle) {
// handle error appropriately
conn.rollback();
} finally {
// cleanup
conn.close(); // depends on when the connection was allocated
}
您可以在“ Connection
界面中使用rollback
方法。 http://java.sun.com/j2se/1.5.0/docs/api/java/sql/Connection.html#rollback()
另外,您還必須將setAutoCommit
設置為false
並適當地調用commit
和rollback
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.