Java Crosstab - preparedstatement查询

时间:2011-10-15 08:46:25

标签: java postgresql prepared-statement crosstab

我有一个典型的带有静态参数的交叉表查询。它适用于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 个答案:

答案 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
}