繁体   English   中英

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

[英]SQL statement working in tool but not in Java using JDBC

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

"; 预期 ")"; SQL 语句: ...

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;

我试过使用换行符,带行分隔符的 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 ")";

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

你必须包装你的数组参数? 在括号内:

... horseid IN (?) ...

啊,您正在使用H2 ,感谢您添加该标志。 H2似乎不支持PARTITION 看这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM