我正在使用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查询应该没有任何问题
答案 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,查询就可以了。