2016-07-08 299 views
2

我正在用Java写一个程序,向我的MySQL DB插入一堆信息,并且需要跟踪失败的次数和原因。我知道executeUpdate()将返回受SQL语句影响的行数。失败的原因executeUpdate(“INSERT ...”);

int rows = stmt.executeUpdate("INSERT/UPDATE..."); 

我的问题是,如果返回值是0(在这种情况下也不例外),是有办法找到导致INSERT/UPDATE到不行的可能原因是什么?

+0

如果UPDATE不会失败,返回0结果的唯一可能性是如果找不到记录。对于INSERT,我无法想象一种情况。 –

+0

考虑在mysql数据库上启用错误日志记录。它将包含一个故障列表,其中包含(有时是隐晦的)原因描述。 – DwB

回答

2

对于UPDATE,返回值0很明显:没有行更新。 对于INSERT,我能想到的唯一情况是当您尝试执行INSERT SELECT(...)并且SELECT的结果包含0行时。

1

好吧,它没有失败。零代表没有变化。 我看到了两种获取更多信息的方法。

  1. 使用stmt.execute()返回false,然后检查整数值。如果它是-1,那么结果就是一个不好的迹象。

  2. 使用用于插入/更新/删除操作的结果集。但是,你需要获取确切的数据,你想更新/ .....

注:假如一个异常被扔,你会在catch块,exc.getMessage变得更友好的消息()