H2 Java 插入忽略 - 允许异常

Posted

技术标签:

【中文标题】H2 Java 插入忽略 - 允许异常【英文标题】:H2 Java Insert ignore - allow exception 【发布时间】:2011-07-18 17:02:19 【问题描述】:

我正在开发一个与 H2 数据库接口的 java 插件。我真正想要的是“插入忽略”语句;但是,我知道 H2 不支持这一点。我也知道 Merge,但这真的不是我想要的,如果记录存在我不想更改它。

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

    这是合理的做法吗?我不是让错误发生的人,但这似乎是这种情况下最好的方法(它不应该发生那么多)。 如何防止此异常影响我的日志文件?如果没有办法阻止堆栈中的异常,我可以重定向作为输出的堆栈跟踪的输出吗?

谢谢。

【问题讨论】:

【参考方案1】:

一种解决方案是使用:

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

【讨论】:

不错的解决方法 - 在等待时已经用 2 个单独的查询做了类似的事情。不过,我仍然想了解 Java 异常。 我不会费心测试这个,但我不确定它是否会起作用(无论如何都给了你分数)。我指的异常是在应用程序中记录的,而不是直接从 h2 中记录的。 我会发布我的代码/日志,但这不是我要发布的代码。谢谢。 "对偶部分除外;您可能需要创建自己的单行虚拟表"。这听起来很 hacky。

以上是关于H2 Java 插入忽略 - 允许异常的主要内容,如果未能解决你的问题,请参考以下文章

使用 ALTER TABLE 添加新列后 H2 数据库插入数据异常

java需要h2数据库抛出jdbc异常

插入时间戳时的 H2 org.h2.jdbc.JdbcSQLSyntaxErrorException

SQL(Java,h2):检索我刚刚插入数据库的单个项目的唯一 ID 的最佳方法是啥? [复制]

在服务器模式下使用 H2 可能的最大连接数

无法在 H2 中查看最近插入的结果