我有以下的域對象:JDBC通過內的PreparedStatement
class Cat
{
String name;
int age;
}
和下面的語句做貓的批量插入:
void insertBulkCats(Collection<Cat> cats)
{
Connection conn = getConnection();
PreparedStatement statement = new PreparedStatement();
for(Cat cat : cats)
{
statement.setString(1, cat.getName());
statement.setInt(2, cat.getAge());
statement.addBatch();
}
statement.executeBatch();
PreparedStatement mergeStatement = conn.prepareStatement(MERGE_CATS);
mergeStatement.execute();
PreparedStatement dropStatement = conn.prepareStatement(CLEAR_CATS);
dropStatement.execute();
conn.commit();
}
這是一個甲骨文數據庫。由於我想要執行的步驟是插入所有貓,對我的存檔貓進行合併,然後刪除插入的原始貓的所有記錄。我擔心的是,上述方法並不能保證發生回滾或單獨操作。我的問題是我如何保證這一切都作爲一個原子操作來執行?另外,如何保證沒有其他函數觸及數據庫(對Cat表進行更新),而不是讀取數據?
你知道你必須執行你的'mergeStatement'和'dropStatement',不只是準備它們,對嗎? – Olaf 2012-07-26 12:58:31
@Olaf是的,我忘了包括那個,因爲我正在用手抄錄,顯然沒有一張名爲Cat的表格。更新:) – Woot4Moo 2012-07-26 13:02:14