[英]SQL statement working in tool but not in Java using JDBC
I'm using the below SQL query to fetch some data from the database.我正在使用下面的 SQL 查询从数据库中获取一些数据。 The DBMS I'm using is H2, a native java implementation.
我使用的 DBMS 是 H2,它是一个原生的 Java 实现。 Even though I can retrieve said data using a H2 tool, it gives me the following error when I use it as a
PreparedStatement
in JAVA:尽管我可以使用 H2 工具检索所述数据,但当我将其用作 JAVA 中的
PreparedStatement
时,它给了我以下错误:
"; expected ")"; SQL statement: ...
"; 预期 ")"; 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;
I've tried using newlines, stringbuilder with line separator to no avail.我试过使用换行符,带行分隔符的 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();
The appendString function just appends a newline to the String. appendString 函数只是将换行符附加到字符串。 I use this in a preparedstatement
我在一个准备好的语句中使用它
What am I doing wrong?我究竟做错了什么?
EDIT: This is the full error in question编辑:这是有问题的完整错误
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 ")";
There is a [*] after PARTITION. PARTITION 后有一个 [*]。 Does this mean that the error occurs there?
这是否意味着错误发生在那里?
You have to wrap your array-parameter ?
你必须包装你的数组参数
?
in parentheses:在括号内:
... horseid IN (?) ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.