2011-10-15 76 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 
}