H2问题:请求在H2控制台中有效,而不在jUnit测试中

问题描述 投票:0回答:1

我遇到H2数据库的问题,我不知道这是什么问题。

我正在使用3个字母数字的代码生成器,该代码生成器的行为应该是将现有的最高代码增加一个(这是将存储在DB服务器上的SQL函数)。

以下代码在H2控制台中可以完美工作:

SELECT TOP 1 concat(a.Chr, b.Chr, c.Chr) AS REF
FROM 
(VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z')) a(Chr)

CROSS JOIN 
(VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z')) b(Chr)

CROSS JOIN 
(VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z')) c(Chr)

WHERE concat(a.Chr,b.Chr,c.Chr)  > (
      SELECT TOP 1 
         CASE
              WHEN INSTRUCTION_CODE IS NULL 
              THEN ''  
              ELSE INSTRUCTION_CODE 
              END
      FROM ACCOUNT 
      ORDER BY INSTRUCTION_CODE DESC
                               )

ORDER BY REF;

我需要在Java jUnit测试中实现此请求。这是我所做的:

public static ResultSet getReference(java.sql.Connection con) throws SQLException {
        String query = "SELECT TOP 1 concat(a.Chr, b.Chr, c.Chr) AS REF "
                + "FROM "
                + "(VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z')) a(Chr) "
                + "CROSS JOIN "
                + "(VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z')) b(Chr) "
                + "CROSS JOIN "
                + "(VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z')) c(Chr) "
                + "WHERE concat(a.Chr, b.Chr, c.Chr)  > "
                + "(SELECT TOP 1 "
                + "     CASE WHEN INSTRUCTION_CODE IS NULL "
                + "     THEN '' "
                + "     ELSE INSTRUCTION_CODE "
                + "     END "
                + "FROM ACCOUNT order by INSTRUCTION_CODE DESC) "
                + "ORDER BY REF";
        java.sql.ResultSet rs = con.createStatement().executeQuery(query);

        return rs;
    }

这是播放时收到的错误消息:

Caused by: org.h2.jdbc.JdbcSQLException: Syntax error in SQL statement "SELECT TOP 1 CONCAT(A.CHR, B.CHR, C.CHR) AS REF FROM (VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z'))A([*]CHR) CROSS JOIN (VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z'))B(CHR) CROSS JOIN (VALUES('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F'),('G'),('H'),('I'),('J'),('K'),('L'),('M'),('N'),('O'),('P'),('Q'),('R'),('S'),('T'),('U'),('V'),('W'),('X'),('Y'),('Z'))C(CHR) WHERE CONCAT(A.CHR, B.CHR, C.CHR)  > (SELECT TOP 1 CASE         WHEN INSTRUCTION_CODE IS NULL        THEN ''        ELSE INSTRUCTION_CODE        END FROM ACCOUNT ORDER BY ACBS_PAYMENT_INSTRUCTION_CODE DESC) ORDER BY REF ";

你有没有看到我没有的东西?

感谢

java h2
1个回答
0
投票

当您使用H2控制台时,您似乎使用的是H2的最新版本,而您的应用程序中则使用某些旧版本(1.4.196或更旧的版本。)>

这些旧版本不支持派生的列列表语法。您还需要在应用程序中使用更新的版本。

© www.soinside.com 2019 - 2024. All rights reserved.