2

我想知道基于java中sql的唯一索引捕获异常是否是个好主意。

如果是这样,我想捕获像“1-0 的重复条目”这样的异常,然后处理异常,否则在数据库表中正确插入?

4

3 回答 3

2

我说你不这样做,有两个原因:

  • 错误消息有点不清楚:ERROR 1062 (23000): Duplicate entry 'xxx' for key 1。您是否总是 100% 确定哪个键是 1?
  • 它将您锁定到特定的数据库供应商

我发现交易更简单:

  • 检查行的存在;
  • 如果该行已经存在,则抛出异常;
  • 插入新行。

性能问题

我说测量两次,切割一次。分析您的特定用例的使用情况。我会说除了繁重的数据库使用场景外,性能不会成为问题。

原因是,一旦您SELECT对该特定行执行操作,其数据将被放置在数据库缓存中,并立即用于对INSERT语句的索引进行的插入检查。还要记住,这种访问是由索引支持的,因此得出的结论是性能不会成为问题。

但是,像往常一样,做测量。

于 2009-06-22T08:04:02.663 回答
1

我不明白为什么不。它可能比在插入之前运行查询更有效。不过,捕获异常的错误代码可能比识别错误消息更好。

于 2009-06-22T07:19:15.873 回答
1

您可以使用 REPLACE 命令。它根据记录的存在插入/更新。它也是原子的,而查询然后插入/更新不是。这取决于如果您检测到密钥违规,您想做什么?

于 2009-06-22T07:50:08.790 回答