实际上,实际上有两种方法可以实现此目的:
在同一事务内插入-之前测试记录是否存在。
根据SQL规范
SQLException#getSQLState()
,确定捕获到的SQLException
开头23
是否违反约束。也就是说,它可能是由比“仅”违反约束更多的因素引起的。您不应将所有内容都修改为约束违例。SQLException
public static boolean isConstraintViolation(SQLException e) {return e.getSQLState().startsWith("23");
}
我选择第一个,因为它在语义上更正确。实际上,这不是例外情况。您即 知道
它可能会发生。但是,在繁重的并发环境中,如果事务未同步(可能不知不觉或无法优化性能),则可能会失败。然后,您可能想确定异常。
就是说,通常您不应该在 主键 上遇到约束冲突。在设计良好的数据模型中,它使用技术密钥作为主密钥,它们通常由数据库本身进行管理。该字段不是
唯一的键 吗?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)