JDBC约束异常详细信息

时间:2013-04-05 19:41:53

标签: sql sql-server transactions unique-constraint

我正在使用JDBC将数据持久保存到SQL Server,并希望将新行插入到具有主键,多个外键和各种列的多个唯一性约束的表中。我想知道如何处理约束违规,以便我可以确定哪些字段需要更正(以便向用户报告有意义的内容)。

e.g:

表格测试:id(PRIMARY),fk_id(FOREIGN KEY),field1(UNIQUE),field2(UNIQUE)

在field1或field2中插入重复值会产生:

ErrorCode: 2627
SQLState: 23000
Violation of UNIQUE KEY constraint '<UNIQUE CONSTRAINT NAME>'. Cannot insert duplicate key in object 'dbo.test'. The duplicate key value is (<VALUE>).

但是,这还不足以确定导致异常的字段(因此我可以告诉用户,更正字段1或字段2),而不是解析错误消息并使用约束名称(感觉不对似乎是一个脆弱的解决方案)。

我能想到的另一种方法是不依赖异常而是查询具有相同值的任何现有行(在插入之前手动检查唯一性)。但是,这在可序列化事务中需要潜在的许多查询(降低并发性)。更糟糕的是,如果时间不幸与另一个事务冲突,则事务可能会死锁并回滚。

有没有更好的方法来实现我正在尝试做的事情而不必解析(特定于语言环境)异常消息? 什么是“最佳实践”方式?

0 个答案:

没有答案