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 数据库插入数据异常
插入时间戳时的 H2 org.h2.jdbc.JdbcSQLSyntaxErrorException