【发布时间】:2023-03-30 12:49:01
【问题描述】:
当用户在对话框中输入一些数据时,我尝试将数据插入到 sqlite 数据库表中。但是我必须检查是否没有违反主键约束。我需要一些提示,告诉用户这条记录已经存在的最佳方式是什么。到目前为止,我认为我有两个选择:
1.) 使用 'select' 和 'where' 查询记录,并尝试找出该记录是否已经存在
2.) 在插入时尝试/捕获并检查错误代码 19,该错误代码说明违反了约束。
遗憾的是,数字 19 绝不仅仅是违反主键约束,而是违反任何约束。我更喜欢第一个选择,但它不是消耗太多性能吗?
为什么不存在关于检查主键是否存在并获取适当记录数据的功能,以便我可以用适当的数据通知用户该记录已经存在。
感谢您对此主题的任何提示。
【问题讨论】:
-
使用选择。 Try-catch 的目的是处理意外行为。这是一个非常典型的案例。
-
您可以编写一个存储过程,先进行检查,如果记录不存在则插入,并返回成功或失败代码。
-
感谢您的提示!
-
这不应该出现。用户永远不应该看到或知道主键。他们应该知道他们是在添加新的东西还是更新现有的东西。你的应用也应该知道这一点。
-
是的,我同意。无论如何,具有三个字段的 pk 需要一个具有多个 AND 语句的奇怪 where 子句。复合 pk 定义的语法要容易得多。在用户视图中,我会提示用户这条记录已经存在,他/她可以取消操作o按确定编辑现有记录。