我根据这篇很棒的帖子实现了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的限制,还是我做错了什么?
提前谢谢你,里昂
发布于 2013-01-09 07:32:04
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诊断语句来确定更新是否成功。
http://hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_diagnostics_state
发布于 2013-01-09 07:25:18
显然,您不能在单个executeUpdate()调用中使用多个语句。请调用两次,第一次做UPDATE,下一次做INSERT
https://stackoverflow.com/questions/14225606
复制相似问题