使用组合更新和插入与hypersql

时间:2013-01-08 23:05:54

标签: java hsqldb upsert

我正在根据这篇伟大的帖子实现upsert: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的限制还是我做错了什么?

提前谢谢 利昂

2 个答案:

答案 0 :(得分:0)

您显然无法在单executeUpdate()次调用中使用多个语句。请第一次拨打UPDATE两次,再次拨打INSERT

答案 1 :(得分:0)

HSQLDB支持MERGE语句:

http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_merge_statement

合并声明通常比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