java - H2 Java Insert ignore - 允许异常

标签 java exception h2

我正在开发一个与 H2 数据库接口(interface)的 java 插件。我真正想要的是一个“Insert Ignore”语句;但是,我知道 H2 不支持这一点。我也知道合并,但这真的不是我想要的,如果记录存在我不想改变它。

我正在考虑的是只运行插入并让重复键异常发生。但是,我不希望它填满我的日志文件。数据库调用发生在我无法更改的导入类中。所以我的问题是:

  1. 这样做合理吗?我不是一个允许错误发生的人,但这似乎是这种情况下的最佳方式(它不应该发生那么多)。
  2. 如何防止这个异常出现在我的日志文件中?如果没有办法在堆栈中阻止异常,我可以重定向输出的堆栈跟踪的输出吗?

谢谢。

最佳答案

一种解决方案是使用:

insert into test 
select 1, 'Hello' from dual 
where not exists(select * from test where id = 1)

这应该适用于所有数据库(双重部分除外;您可能需要创建自己的一行虚拟表)。

要禁用日志记录异常,请将 ;trace_level_file=0 附加到数据库 URL:

jdbc:h2:~/test;trace_level_file=0

或者运行SQL语句:

set trace_level_file 0

关于java - H2 Java Insert ignore - 允许异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6736518/

相关文章:

java - 如何让 Play 框架应用程序在执行 Controller CRUD API 方法之前运行 SQL 脚本?

java - Android:语言更改后刷新当前 fragment

flutter - 如何在flutter中使用CachedNetworkImage处理404异常

python - 在 Python 提示符处引发错误后如何获取最后一个异常对象?

exception - Laravel 4 无法捕获异常

sql - 如何正确使用自动增量

java - 创建返回对象的方法的语法问题(java)

java - 如何在不同的类布局中显示呈现的对象?

java - Vaadin 8 国际化 i18n

java - 将 Hibernate 与 H2 数据库和 joda DateTime 一起使用