Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.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
SQL语句在工具中工作,但不在Java中使用JDBC_Java_Sql_Jdbc_Prepared Statement_H2 - Fatal编程技术网

SQL语句在工具中工作,但不在Java中使用JDBC

SQL语句在工具中工作,但不在Java中使用JDBC,java,sql,jdbc,prepared-statement,h2,Java,Sql,Jdbc,Prepared Statement,H2,我正在使用下面的SQL查询从数据库中获取一些数据。我使用的DBMS是H2,一个本机java实现。尽管我可以使用H2工具检索所述数据,但当我将其用作JAVA中的PreparedStatement时,会出现以下错误: );预期;SQL语句: 我尝试过使用换行符、带行分隔符的stringbuilder,但没有效果 StringBuilder sb= new StringBuilder(); appendString(sb, "SELECT * FROM ("); appendStrin

我正在使用下面的SQL查询从数据库中获取一些数据。我使用的DBMS是H2,一个本机java实现。尽管我可以使用H2工具检索所述数据,但当我将其用作JAVA中的PreparedStatement时,会出现以下错误:

);预期;SQL语句:

我尝试过使用换行符、带行分隔符的stringbuilder,但没有效果

StringBuilder sb= new StringBuilder();
    appendString(sb, "SELECT * FROM (");
    appendString(sb, "SELECT temp.*, ROW_NUMBER() OVER (PARTITION BY horseid ORDER BY updated desc) AS num");
    appendString(sb, "FROM(");
    appendString(sb, "SELECT horseid, name, breed, min_speed, max_speed, updated FROM horsehistory");
    appendString(sb, "UNION");
    appendString(sb, "SELECT id, name, breed, min_speed, max_speed, updated FROM horse");
    appendString(sb, ") AS temp");
    appendString(sb, "WHERE updated < ? AND horseid IN ?");
    appendString(sb, ")");
    appendString(sb, "WHERE num = 1;");
    String sql=sb.toString();
appendString函数只是在字符串后面追加一个换行符。我在一份准备好的声明中使用了这个

我做错了什么

编辑: 这是所讨论的全部错误

Syntax error in SQL statement "SELECT * FROM ( SELECT TEMP.*, ROW_NUMBER() OVER (PARTITION[*] BY        HORSEID ORDER BY UPDATED DESC) AS NUM FROM ( SELECT HORSEID, NAME, BREED, MIN_SPEED, MAX_SPEED, UPDATED FROM HORSEHISTORY UNION SELECT ID, NAME, BREED, MIN_SPEED, MAX_SPEED, UPDATED FROM HORSE ) AS TEMP WHERE UPDATED < ? AND HORSEID IN (?) ) WHERE NUM = 1  "; expected ")";

分区后有一个[*]。这是否意味着错误发生在那里?

啊,您使用的是H2,感谢您添加该标志。H2似乎不支持分区

必须包装数组参数吗?括号内:

... horseid IN (?) ...

当你刚刚移除时会发生什么;在结尾处?追加时不包括空格。例如。。。AS-num;从某人,从;变成numFROM@Lino同样的错误…@xtratic appendString函数会处理它:private void appendstringbuilder sb,String val{sb.appendval+System.lineSeparator;}打印sql字符串并查看。这很奇怪,因为它在h2控制台中似乎工作得很好:你知道它在这里工作的原因吗?@Minimax不知道
... horseid IN (?) ...