我试图在我的表中插入一行,只要它不存在(基于唯一的id(myId))。我不希望在插入之前查询每一行,因为这需要一些时间。我想尝试插入,如果失败则没问题。有没有办法做到这一点?
目前,我正在做:
try {
sqlObj.executeInsert(query)
}
catch (Exception e) {
println "Sql Exception"
}
但这有点慢,因为在某些情况下几乎每一行都会引发异常。有没有办法在SQL / Groovy / Postgresql中处理它?</ p>
答案 0 :(得分:1)
SQL中的merge statement允许您为行存在或不存在时指定备用逻辑。你可以这样写:
MERGE INTO tablename USING table_reference ON (condition)
WHEN NOT MATCHED THEN
INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...
(这是维基百科示例,其中“匹配时”部分已删除。
选择检查密钥是否存在需要很长时间,这有点令人不安。您是否使用select *语句而不是循环遍历Java中的所有行?另外,id字段是否有索引?如果没有索引,则合并语句将遇到与性能相关的问题。