10

我有一个带有静态参数的典型交叉表查询。它适用于 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 上采用查询字符串的查询方法。

有什么我想念的想法吗?

4

2 回答 2

20

您已经迷上了以下令人困惑的类型层次结构PreparedStatement extends Statement

PreparedStatement具有与execute*(String)类似的方法Statement,但不应该使用它们,只需使用无参数 execute*()方法PreparedStatement--- 您已经给出了要执行的实际查询字符串conn.prepareStatement()

于 2011-10-15T08:52:33.470 回答
7

请试试:

String query = "...";
PreparedStatement stat = conn.prepareStatement(query);
ResultSet rs = stat.executeQuery();
while (rs.next()) {
  // TODO
}
于 2011-10-15T08:51:46.020 回答