我在两个不同的表上进行了两次delete
操作。删除后我已经知道是否执行了两个查询。这是我的代码。
properties.load(inputStream);
String sql = properties.getProperty("deleteImageByImageID");
ps = DBConnection.prepareStatement(sql);
ps.setString(1, imageID);
sql = properties.getProperty("deleteAnnImageByImageID");
ps2 = DBConnection.prepareStatement(sql);
ps2.setString(1, imageID);
int count = ps.executeUpdate();
count += ps2.executeUpdate();
但是现在我通过添加
来改变代码DBConnection.setAutoCommit(false);
....
DBConnection.commit();
现在我如何知道两个语句是否都成功执行(两个删除都发生了)??
答案 0 :(得分:2)
您的代码应如下所示:
connection.setAutoCommit(false);
ps = DBConnection.prepareStatement(sql);
ps.setString(1, imageID);
ps2 = DBConnection.prepareStatement(sql);
ps2.setString(1, imageID);
int count = ps.executeUpdate();
count += ps2.executeUpdate();
connection.commit();
executeUpdate()
次调用返回的计数是事务提交时将受影响的行数。如果事务回滚,则不会影响任何行。
现在我怎么知道两个语句是否都成功执行了?
取决于“成功执行”的含义:
如果您的意思是“没有SQL错误”等,那么您就知道如果prepare,set和execute语句中没有SQL异常,就会发生这种情况。如果任何SQL语句失败,则该事务将不可提交。
如果您的意思是将更改安全地写入磁盘(或其他),那么您知道如果提交没有抛出异常就会发生这种情况。
如果您的意思是更改符合您的预期,那么以上所有内容,以及计数都是您所期望的。
答案 1 :(得分:0)
首先,根据失败的严重程度,可能会抛出异常,因此您应该确保并使用try / catch - 如果它抛出您想要处理它的异常。
其次,在你的捕获中你将需要回滚牵引力。
DbConnection.rollback();