JDBC:如何确定查询是否成功?

5

我正在使用JDBC与mysql。 我可以很好地运用查询。 但是,例如更新查询,我想知道是否有任何方法可以确定更新是否成功,例如如果找不到行。

UPDATE TABLE SET  column =  'newvalue' WHERE  primary_key =2

如果可能的话,我希望能够得到具体的错误信息,这样我就可以抛出特定的异常来说明查询失败的原因。
谢谢您的帮助。
2个回答

11

executeUpdate()会返回受SQL语句影响的行数:

int rows = stmt.executeUpdate("UPDATE ...");
System.out.println(rows + " rows updated");

当然,你可以通过简单地查看JavaDocs自己找到答案:

返回值:对于SQL数据操作语言(DML)语句,返回行数;对于不返回任何内容的SQL语句,返回0。


问题是我想知道更新失败的具体原因,这样我就可以抛出带有该原因的异常。 - user1795609
2
只有在违反约束条件或语法错误时,它才会“失败” - 然后将抛出SQLException。如果返回0,则仅意味着表中没有行与您的where条件匹配 - 这不被视为“失败”。这是UPDATE语句的可接受结果。 - user330315

3

executeUpdate 方法返回受影响的行数。您可以使用此方法检查更新是否成功执行:

PreparedStatement pstmt = con.prepareStatement("UPDATE TABLE ...");
int rowsUpdated = pstmt.executeUpdate(); 
if (rowsUpdated == 0) {
   // handle no update
}

1
这很不错,但我实际上想要的是一种获取特定错误消息的方法。例如,如果未找到行,则会返回某种错误消息,我可以将其用于抛出异常。 - user1795609
1
如果未找到行,则rowsUpdated将为0 - Luke Woodward

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接