我使用 JDBC(mysql 数据库)编写 Java 程序。
当我违反 mysql 完整性时(例如,我尝试插入相同的主键值),我发现SQL 异常。我应该以永远不会发生的方式编写它(例如,首先布尔函数检查主键值是否不在数据库中,然后调用插入),或者可以仅通过异常来处理它吗?
例子 :
catch (SQLException ex) {ex.printStackTrace(); showSomeErrorDialog(); }
实际上基本上有两种方法可以实现这一目标:
在插入之前测试记录是否存在 - 在同一事务内。
-
确定是否SQLException#getSQLState()被捕获的SQLException
以。。开始23
这是违反约束的SQL规范。也就是说,它可能是由更多因素引起的,而不仅仅是“仅仅”违反约束。你不应该修改每一个SQLException
作为约束违规。
public static boolean isConstraintViolation(SQLException e) {
return e.getSQLState().startsWith("23");
}
我会选择第一个,因为它在语义上更正确。事实上,这并非特例。你就是know它有可能发生。但在事务未同步(无意中或为了优化性能)的高并发环境中,它可能会失败。然后您可能想要确定异常。
也就是说,您通常不应该违反约束首要的关键。在使用技术键作为主键的精心设计的数据模型中,它们通常由数据库本身管理。该字段不应该是一个唯一键?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)