Java交叉表 - preparedstatement查询

11

我有一个带有静态参数的典型交叉表查询。使用 createStatement 可以正常工作。我想改用 prepareStatement 进行查询。

String query = "SELECT * FROM crosstab(
    'SELECT rowid, a_name, value 
    FROM test WHERE a_name = ''att2'' 
                OR a_name = ''att3''
    ORDER BY 1,2'
) AS ct(row_name text, category_1 text, category_2 text, category_3 text);";
PreparedStatement stat = conn.prepareStatement(query);
ResultSet rs = stat.getResultSet();

stat.executeQuery(query);
rs = stat.getResultSet();

while (rs.next()) {
    //TODO
}

但似乎没有起作用。

我收到了一个 PSQLException 错误 -

不能在 PreparedStatement 上使用需要查询字符串的查询方法。

你有什么想法?我是否漏掉了什么?

2个回答

21

你被混淆的类型层次结构所迷惑了:PreparedStatement extends Statement

PreparedStatement具有与Statement相同的execute*(String)方法,但它们不应该被使用,只需使用PreparedStatement无参execute*()方法——因为你已经通过conn.prepareStatement()提供了要执行的实际查询字符串。


7

请尝试:

String query = "...";
PreparedStatement stat = conn.prepareStatement(query);
ResultSet rs = stat.executeQuery();
while (rs.next()) {
    // TODO
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接