我有一个典型的带有静态参数的交叉表查询。它适用于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上获取查询字符串的查询方法。
我缺少什么想法?
答案 0 :(得分:19)
您已陷入PreparedStatement extends Statement
的混乱类型层次结构:
PreparedStatement
具有与execute*(String)
相同的Statement
方法,但它们不应该被使用,只需使用无参数 execute*()
PreparedStatement
的方法---你已经使用conn.prepareStatement()
给出了实际的查询字符串。
答案 1 :(得分:7)
请尝试:
String query = "...";
PreparedStatement stat = conn.prepareStatement(query);
ResultSet rs = stat.executeQuery();
while (rs.next()) {
// TODO
}