HSQL中的条件插入失败

时间:2018-11-27 04:05:33

标签: mybatis hsqldb

我正在使用HSQL来执行条件插入,并且它始终会因异常而失败。

Java + MyBatis + HSQL

查询:

<h2 style="text-align:center">
  Your Movie for Tonight is:
</h2>

例外:

INSERT INTO CATS (ID, NAME) 
SELECT #{id}, #{name}
WHERE NOT EXISTS 
    (SELECT * from CATS WHERE NAME = #{name})

我检查了HSQL中是否不支持条件插入。但这似乎并非如此

我已经执行过Caused by: java.sql.SQLSyntaxErrorException: unexpected token: WHERE in statement [INSERT INTO CATS (ID, NAME) select ?, ? WHERE NOT EXISTS (SELECT * from CATS WHERE NAME = ?)] [junit] at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) [junit] at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source) [junit] at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source) [junit] at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source) [junit] at org.apache.ibatis.datasource.pooled.PooledConnection.invoke(PooledConnection.java:245) [junit] at com.sun.proxy.$Proxy49.prepareStatement(Unknown Source) ,因此在HSQL中执行RAW postgres查询应该没有任何问题

2 个答案:

答案 0 :(得分:1)

要动态获取列时,需要使用$而不是#

INSERT INTO CATS (ID, NAME) 
SELECT ${id}, ${name}
WHERE NOT EXISTS 
    (SELECT * from CATS WHERE NAME = #{name})

答案 1 :(得分:0)

问题是我的条件插入查询是特定于Postgres的,不能在HSQL中执行。我将otj-pg-embedded用于运行时的postgres实例而不是HSQL,查询就可以了。