我有以下的域对象: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