Java 当递归谓词使用绑定变量时,递归CTE不起作用

Java 当递归谓词使用绑定变量时,递归CTE不起作用,java,sql,h2,recursive-query,Java,Sql,H2,Recursive Query,在“我知道,实验”功能中使用递归CTE时,以下查询不起作用: 连接con=getConnection; System.out.println错误结果:; PreparedStatement stmt=con.prepareStatement 使用递归tf作为+ 选择1+ 联合所有+ 选择t.f+1+ 从t+ 其中t.f

在“我知道,实验”功能中使用递归CTE时,以下查询不起作用:

连接con=getConnection; System.out.println错误结果:; PreparedStatement stmt=con.prepareStatement 使用递归tf作为+ 选择1+ 联合所有+ 选择t.f+1+ 从t+ 其中t.f<+ + 选择t.f+ 从t ; stmt.setInt1,10; 结果集rs=stmt.executeQuery; 而rs.next System.out.printlnrs.getInt1; 生产的产量为:

1. 预期结果将是:

1. 2. 3. 4. 5. 6. 7. 8. 9 10 有什么问题吗?

这是一个已知的问题。当递归查询包含绑定变量时,H2会出现问题。以下查询未使用绑定值,并按预期工作:

System.out.println("Correct result:");
rs = con.createStatement().executeQuery(
    "WITH recursive t(f) AS ( "+
    "    SELECT 1             "+
    "    UNION ALL            "+
    "    SELECT t.f + 1       "+
    "    FROM t               "+
    "    WHERE t.f < 10       "+
    ")                        "+
    "SELECT t.f               "+
    "FROM t                   "
);

while (rs.next())
    System.out.println(rs.getInt(1));
这是一个众所周知的问题。当递归查询包含绑定变量时,H2会出现问题。以下查询未使用绑定值,并按预期工作:

System.out.println("Correct result:");
rs = con.createStatement().executeQuery(
    "WITH recursive t(f) AS ( "+
    "    SELECT 1             "+
    "    UNION ALL            "+
    "    SELECT t.f + 1       "+
    "    FROM t               "+
    "    WHERE t.f < 10       "+
    ")                        "+
    "SELECT t.f               "+
    "FROM t                   "
);

while (rs.next())
    System.out.println(rs.getInt(1));