2011-10-15 16 views
7

Ho una tipica query a campi incrociati con parametri statici. Funziona bene con createStatement. Voglio usare preparestatement per interrogare invece.Campo incrociato Java - query di preparazione dello stato

  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 
     } 

Ma non sembra funzionare.

Ricevo una variabile PSQLException - Impossibile utilizzare i metodi di query che accettano una stringa di query in PreparedStatement.

Qualche idea di cosa mi manca?

risposta

15

sei caduto per il tipo gerarchico confuso di PreparedStatement extends Statement:

PreparedStatement ha gli stessi metodi come execute*(String)Statement, ma non dovresti essere utilizzato, basta usare i metodi senza parametroexecute*() di PreparedStatement --- è già stata fornita la stringa di query effettiva da eseguire utilizzando conn.prepareStatement().

6

Si prega di provare:

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