我正在根据这篇精彩的文章实现更新插入:Insert, on duplicate update in PostgreSQL?这对于 psql 来说效果非常好。但是,我无法向我用于测试的 hsqldb 发出相同的查询。 我的 sql 看起来像这样:
UPDATE account set name = ?, email = ?, type = ?, regts = ?, dao_updated = ? WHERE id = ?;
INSERT INTO account (id, name, email, type, regts, dao_created,dao_updated) SELECT ?,?,?,?,?,?,? WHERE NOT EXISTS (SELECT 1 FROM account WHERE id = ? );
我收到错误消息:
Caused by: java.sql.SQLSyntaxErrorException: unexpected token: INSERT
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)
这是 hsqldb 的限制还是我做错了什么?
提前致谢 莱昂
最佳答案
HSQLDB 支持 MERGE 语句:
http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_merge_statement
merge 语句通常比 UPSERT 和非标准替代语句更强大。
或者,您可以使用 CREATE PROCEDURE 并定义一个类似于链接答案中给出的 PostgreSQL 示例的过程。
http://hsqldb.org/doc/2.0/guide/sqlroutines-chapt.html#src_psm_conditional
您可以使用 GET DIAGNOSTICS 语句来查明更新是否成功。
http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_diagnostics_state
关于java - 使用 hypersql 组合更新和插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14225606/