簡體   English   中英

Java:回滾數據庫更新?

[英]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並適當地調用commitrollback方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM