Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HSQLDB与postgres的兼容性存在问题_Java_Database_Postgresql_Hsqldb_Dbunit - Fatal编程技术网

Java HSQLDB与postgres的兼容性存在问题

Java HSQLDB与postgres的兼容性存在问题,java,database,postgresql,hsqldb,dbunit,Java,Database,Postgresql,Hsqldb,Dbunit,我的Postgres查询涉及选择更新 查询: UPDATE TABLE_NAME SET COL1 = 'C1' WHERE COL2 IN (SELECT COL2 FROM TABLE_NAME WHERE COL3 = 'C3' LIMIT 1 FOR UPDATE SKIP LOCKED) 使用HSQLDB进行测试。它不支持更新。从HSQLDB2=2.2升级到2.3.3到2.4.0。但是没有成功。请建议一些解决方法,或者我遗漏了什么 还添加了以下内容: sql.syntax pgs=

我的Postgres查询涉及选择更新

查询:

UPDATE TABLE_NAME SET COL1 = 'C1' WHERE COL2 IN 
(SELECT COL2 FROM TABLE_NAME WHERE COL3 = 'C3' LIMIT 1 FOR UPDATE SKIP LOCKED)
使用HSQLDB进行测试。它不支持更新。从HSQLDB2=2.2升级到2.3.3到2.4.0。但是没有成功。请建议一些解决方法,或者我遗漏了什么

还添加了以下内容:

sql.syntax pgs=true;
遇到异常:

java.lang.reflect.UndeclaredThrowableException位于 com.sun.proxy.$Proxy43.updateUnknown源由以下原因引起: java.lang.reflect.InvocationTargetException由以下原因引起: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback;错误的SQL语法[更新表\u名称集COL1 =?其中COL2在表中选择COL2,其中COL3=?限制?用于更新跳过锁定];嵌套异常是 java.sql.SQLSyntaxErrorException:意外标记:FOR required:at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslateSQLExceptionSubclassTranslator.java:91 在 org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.TranslateAstractFallbackSqlExceptionTranslator.java:73 在 org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.TranslateAstractFallbackSqlExceptionTranslator.java:82 在 org.springframework.jdbc.core.jdbcttemplate.executeJdbcTemplate.java:655 在 org.springframework.jdbc.core.JdbcTemplate.updateJdbcTemplate.java:876 在 org.springframework.jdbc.core.JdbcTemplate.updateJdbcTemplate.java:937 在 org.springframework.jdbc.core.JdbcTemplate.updateJdbcTemplate.java:942 至少由以下原因引起:java.sql.SQLSyntaxErrorException:意外标记:FOR 必需:位于org.hsqldb.jdbc.Util.sqlExceptionUnknown源 org.hsqldb.jdbc.Util.sqlExceptionUnknown源代码位于 org.hsqldb.jdbc.jdbcpresparedstatement.Unknown Source at org.hsqldb.jdbc.JDBCConnection.PrepareStatement未知源位于 com.mchange.v2.c3p0.impl.NewProxyConnection.prepareStatementNewProxyConnection.java:387 在 org.springframework.jdbc.core.JdbcTemplate$SimplePreparedStatementCreator.createPreparedStatementJdbcTemplate.java:1530 在 org.springframework.jdbc.core.jdbcttemplate.executeJdbcTemplate.java:633 原因:org.hsqldb.hsqldb异常:意外令牌:对于必需的: 位于org.hsqldb.error.error.parseErrorUnknown Source at org.hsqldb.ParserBase.unexpectedTokenRequireUnknown来源于 org.hsqldb.ParserBase.readthis未知源位于 org.hsqldb.ParserDQL.xReadInPredicateRightPart位于的未知源 org.hsqldb.ParserDQL.xReadPredicateRightPart位于的未知源 org.hsqldb.ParserDQL.xreadbooleanprimaryornull未知源位于 org.hsqldb.ParserDQL.XreadBooleanTestOrNullUnknown源位于 org.hsqldb.ParserDQL.xreadbooleanfactorNullUnknown源位于 org.hsqldb.ParserDQL.xreadbooleantermornull未知源位于 org.hsqldb.ParserDQL.xReadBooleanValueExpression未知源位于 org.hsqldb.ParserDML.compileUpdateStatement未知源位于 org.hsqldb.ParserCommand.compilePartUnknown源代码位于 org.hsqldb.ParserCommand.compileStatementUnknown源代码位于 org.hsqldb.Session.compileStatement未知源位于 org.hsqldb.StatementManager.compileUnknown源代码位于 org.hsqldb.Session.executeUnknown来源


此查询语法特定于PostgreSQL行锁定支持。您可以将HSQLDB的查询修改为:

UPDATE TABLE_NAME SET COL1 = 'C1' WHERE COL2 IN 
(SELECT COL2 FROM TABLE_NAME WHERE COL3 = 'C3' LIMIT 1)
事实上,这个简化的查询在HSQLDB中做了相同的事情,但与PostgreSQL一起使用时可能会有不同的结果:

UPDATE TABLE_NAME SET COL1 = 'C1' WHERE COL3 = 'C3'
如果sql.syntax pgs=true;您提到的是一个URL属性,它应该具有 下划线,而不是空格,如下所示: sql.syntax_pgs=true

但是,如果要将兼容模式设置为数据库查询,则可以执行: 将数据库SQL语法PGS设置为TRUE