当前位置: 首页 > 面试题库 >

Java + MySQL完整性违规处理

汪和悌
2023-03-14
问题内容

我使用JDBC(MySQL数据库)编写Java程序。当我违反mysql完整性(尝试插入相同的主键值)时,我捕获了 SQL异常。
我应该用它永远不会发生的方式来编写它(首先是布尔函数检查主键值是否不在数据库中,然后再调用insert),还是可以通过异常处理它呢?范例:

catch (SQLException ex) {ex.printStackTrace(); showSomeErrorDialog(); }

问题答案:

实际上,实际上有两种方法可以实现此目的:

  1. 在同一事务内插入-之前测试记录是否存在。

  2. 根据SQL规范SQLException#getSQLState(),确定捕获到的SQLException开头23是否违反约束。也就是说,它可能是由比“仅”违反约束更多的因素引起的。您不应将所有内容都修改为约束违例。SQLException

    public static boolean isConstraintViolation(SQLException e) {
    return e.getSQLState().startsWith("23");
    

    }

我选择第一个,因为它在语义上更正确。实际上,这不是例外情况。您即 知道
它可能会发生。但是,在繁重的并发环境中,如果事务未同步(可能不知不觉或无法优化性能),则可能会失败。然后,您可能想确定异常。

就是说,通常您不应该在 主键 上遇到约束冲突。在设计良好的数据模型中,它使用技术密钥作为主密钥,它们通常由数据库本身进行管理。该字段不是
唯一的键 吗?



 类似资料:
  • 我想删除,同时删除中具有匹配的 目前,我有一个外键设置为on delete,更新设置为for。

  • 照明\database\queryexception SQLSTATE[23000]:完整性约束违反:19 NOT NULL约束失败:users.password(SQL:插入“users”(“name”、“email”、“username”、“updated_at”、“created_at”)值(MADHUP KUMAR,Chandrashivam99@gmail.com,Vansh123,20

  • 在非常简单的表上运行下面的sql语句时,我收到了下面的错误。这里使用的唯一外键是表中的,外键是,它引用了。我不确定为什么我会收到这个错误,因为我试图在删除它们所依赖的样本之前删除所有运行。下面的代码: java代码: String deleteRunsQuery="DELETE FROM运行";//从运行表中删除行String deleteSamplesQuery="DELETE FROM样本";

  • 问题内容: 我正在尝试使用ALTER IGNORE TABLE + UNIQUE KEY从MySQL表中删除重复项。MySQL文档说: IGNORE是标准SQL的MySQL扩展。如果新表中的唯一键上有重复项,或者在启用严格模式时出现警告,则它控制ALTER TABLE的工作方式。如果未指定IGNORE,则在发生重复键错误时,副本将中止并回滚。如果指定了IGNORE,则只有第一行用于唯一键重复的行。

  • 本文向大家介绍RDBMS中的实体完整性规则,包括了RDBMS中的实体完整性规则的使用技巧和注意事项,需要的朋友参考一下 对于实体完整性规则,每个表都有一个主键。 主键不能为NULL值。 <学生> 学生卡 学生奖 学生奖 在上方,您可以看到我们的主键是Student_ID。我们不能将Student_Awards视为主要关键字,因为并非每个学生都会获得奖励。 让我们看另一个例子- <员工> 员工ID

  • 我正在使用Hibernate 4.0最终版和ojdbc6来开发我的网络应用程序。一切都好,除了当我试图插入一个新的父母/孩子的关系。首先,这些是实体: 让我们看看这两个场景: 员工已存在,我尝试向其添加新地址-- 这是事务处理程序: 你可以想象,2.b的案子是我关心的。我已经调试了事务,这是我调用保存()方法(在DAO类中)时得到的: 会议结束了。saveOrUpdate(employee)方法成