当前位置: 首页 > 知识库问答 >
问题:

OracleJDBC:如何知道哪一行抛出唯一键约束?

松嘉颖
2023-03-14

我有一个oracle查询,我试图使用jdbc执行。以下是查询。

insert into bd_vehicles_temp select * from bd_vehicles_temp_1

表bd_vehicles_temp_1包含约7000-10000行。如果bd_vehicles_temp_1中的主键已经存在于bd_vehicles_temp中,我会得到一个SQLException:唯一密钥约束。

例外行是off-coursepstmt。在我的代码中执行更新()。是否有办法确定bd_vehicles_temp_1中导致异常的行。

或者我必须循环浏览bd_vehicles_temp_1中的行并逐个插入每一行吗?

提前感谢!


共有3个答案

汪栋
2023-03-14

您正在尝试插入到表中,对吗?你应该使用pstmt。executeUpdate()而不是pstmt。execute()。如果表中已有记录,那么最好删除所有行,如果该语句多次执行,则再次添加。

萧飞
2023-03-14

如果知道可能导致异常的列,可以使用(特定于Oracle)

SELECT col FROM bd_vehicles_temp
INTERSECT
SELECT col FROM bd_vehicles_temp_1;

标识两个表中的所有行。

匡安宜
2023-03-14
匿名用户

找出导致问题的行的唯一方法(我知道)是使用Oracle的“将错误记录到”功能。这样插入就不会抛出异常,任何违反任何约束的行都将被写入指定的错误表中。

为此,您首先需要创建一个保存拒绝行的日志表:

EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('BD_VEHICLES_TEMP');

这将创建一个名为ERR$_BD_VEHICLES_TEMP

然后运行“将您的声明更改为以下内容”:

insert into bd_vehicles_temp 
select * 
from bd_vehicles_temp_1
LOG ERRORS REJECT LIMIT UNLIMITED;

即使一行未能验证约束,该语句仍将继续。语句完成后,您可以检查表ERR$_BD_VEHICLES_TEMP中违反约束的行,包括错误消息和值。

(编辑):如果您想在第一个错误处停止(并在日志表中查看),则省略REJECT LIMIT UNLIMITED子句。

更多详细信息在手册中:

  • 对于DBMS_ERRLOGhttp://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_errlog.htm#CEGBBABI

 类似资料:
  • 我的应用程序中不断出现此错误 重复的键值违反唯一约束“product\u supplierinfo\u pkey”详细信息:键(id)=(409)已存在。 这在表product_supplierinfo中。 关键约束需要的实际下一个序列号是5461,而不是409。 有人能告诉我更新此密钥唯一约束的正确查询吗?

  • 注意 当前章节中涉及的配置一般适用于关系数据库。这里展示的扩展方法在你安装了关系数据库提供程序之后就能获得(由Microsoft.EntityFrmeworkCore.Relational 程序包共享)。 唯一约束是为模型中的替代键引入的。 惯例 按照惯例,为替代键引入的索引和约束都被命名为 AX_<实体类型名称>_<属性名称>。对于组合替代键,<属性名> 为用下划线分隔的属性名。 数据注解 不能

  • 我在单元测试中遇到了一个数据库问题。我认为这与我使用TestCase和setUpData的方式有关。 当我尝试使用某些值设置测试数据时,测试会抛出以下错误: 我更改了所有主键,它似乎运行正常。它似乎不会影响任何测试。 但是,我担心我做错了什么。当它第一次发生时,我在我的应用程序上逆转了大约一个小时的工作(对于新手来说,代码不多),这纠正了这个问题。 然后,当我写回更改时,同样的问题再次出现。Tes

  • 我正在创建一个简单的实体,并试图将它持久化到Oracle数据库中。这是我的天赋: 这是我的Java类,它创建了这个实体的一个实例,并使用HiberNate将其保存到数据库中: 当我运行这个程序时,我得到一个异常: 请帮助我在此代码中犯错误的地方。我正在使用 更新:这是我的Hibernate配置文件,表由Hibernate本身生成: 另外,如果可能的话,请给我推荐一个Hibernate-4.3的好资

  • 以下两者之间有区别吗: 以及: 在这两种情况下,名称是否唯一?索引唯一时意味着什么? 编辑:Postgres是唯一的约束,而索引没有回答我的问题。它考虑了FK的情况。我的问题与FK无关。我只想知道在这个例子中,这两个操作是否等价,其中不涉及FK。

  • 我有一个使用Hibernate访问数据库的应用程序。它会抛出如下错误: 组织Spring框架清洁工厂。BeanCreationException:创建URL[文件:/C:/Program Files(x86)/XXX/applicationContext.xml]中定义的名为“sessionFactory”的bean时出错:初始化方法调用失败;嵌套异常是org.hibernate。Annotati