java - 使用 hypersql 组合更新和插入

标签 java hsqldb 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 的限制还是我做错了什么?

提前致谢 莱昂

最佳答案

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/

相关文章:

java - 如何正确地将 Java 中的 double 值设置为两位数

java - 如何重构这个 REST API Spring Boot 应用程序?

java - 在 Google-App-Engine 中使用 HSQLDB

java - Python 3.7 连接到 MAC 上的 HSQLDB

PostgreSQL 在一个 upsert 语句中多次发生冲突

node.js - 在环回应用程序中插入或更新(upsert)

sql - PostgreSQL v9.5+ 更新插入

java - 在 ParseObject 上保存 2D 数组

android - 如何将 HSQL(基于文件)与我的 android 应用程序连接?

java - 在 Java 中使用 for 循环获取超出范围的字符串索引