2011-10-15 63 views
7

我有一个典型的带有静态参数的交叉表查询。它适用于createStatement。我想用preparestatement来查询。Java交叉表 - 准备语句查询

  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上接受查询字符串的查询方法。

任何想法我失踪?

回答

15

你爱上的PreparedStatement extends Statement混乱的类型层次:

PreparedStatement具有相同execute*(String)方法,如Statement,但他们不应该被使用,只是用无参数execute*()方法PreparedStatement ---您已经给出了使用conn.prepareStatement()执行的实际查询字符串。

6

请尝试:

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