2011-10-15 12 views
7

Tengo una consulta de tabla cruzada típica con parámetros estáticos. Funciona bien con createStatement. Quiero usar preparestatement para consultar en su lugar.Java Crosstab - preparedstatement query

  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 
     } 

Pero no parece funcionar.

Obtengo una PSQLException - No se pueden usar los métodos de consulta que toman una cadena de consulta en un PreparedStatement.

¿Alguna idea de lo que me falta?

Respuesta

15

has caído de la jerarquía de tipos confusa de PreparedStatement extends Statement:

PreparedStatement tiene los mismos métodos como execute*(String)Statement, pero no se supone que se utilizará, sólo tiene que utilizar sin parámetrosexecute*() métodos de PreparedStatement --- ya ha dado la cadena de consulta real para ejecutar utilizando conn.prepareStatement().

6

Inténtelo:

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