2010-05-19 462 views
3

我工作的一个Web应用程序,并在一个点,我认为是用户唯一的形式,一个如何正确捕获MySQLIntegrityConstraintViolationException?

 MySQLIntegrityConstraintViolationException Duplicate entry -'username' 
for key 'PRIMARY'

我深知这是为什么被抛出,因为我试图进入一个重复使用相同的主键进入数据库。我不希望对此有任何评论,因为这可能是多余的。

我真正要问的是我应该如何处理这个问题。我试图解决这个例外,但显然我缺乏经验已经赶上了我。

我将不胜感激您的帮助。

是否有更好的方法来检查数据库中的重复条目?

例如,我应该在检查重复成员时执行什么操作,并且仅对数据库检查匹配的用户名和密码?

感谢

回答

1

通常,如果可以避免抛出异常,因为它们是控制程序工作流程的重要机制。你只能用它们来追踪错误和不规则的活动/情况。所有这些意味着如果你发现了一个异常,你可以做的唯一事情就是记录更多的异常,将异常封装在另一个异常中,并最终触发一些后退程序逻辑。

不要期望捕捉异常,只需检查用户名是否正确。我想如果你正在开发某种注册表格,你会做这个检查很多...普通用户有一些流行的词语,如果你实现它的例外,你会很经常... ...

不幸的是,如果你的数据库非常大,主键就是许多复杂的对象,你不能保留内存中的一些元素来执行重复条目的检查。

1

是的,尤其是在这种情况下,最好是检查其他用户是否使用相同的用户名存在之前试图插入用户。

+0

假设您没有内存中的所有用户名,在尝试插入记录之前检查id是否存在会更好吗?您将针对每个插入操作进行数据库查找,而不是偶尔发生异常。 – 2013-01-07 17:43:38

+0

您通常在该字段上有索引,因此查找速度非常快。 – Bozho 2013-01-07 20:10:02

+1

但它仍然需要在网络上往返。这比例外要慢几个数量级。 – 2013-01-08 20:58:25

0

我也遇到同样的问题,请尝试使用catch (MySQLIntegrityConstraintViolationException sql)处理异常。 但是不要忘记有2种类型的MySQLIntegrityConstraintViolationException一个用于JDBC,另一个用于JDBC4。 所以我建议在两个单独的try catch循环中捕获它们。