如何知道从Java提交mySQL时删除的行数

时间:2015-03-07 04:13:00

标签: java mysql

我在两个不同的表上进行了两次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();

现在我如何知道两个语句是否都成功执行(两个删除都发生了)??

2 个答案:

答案 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();