Search code examples
javapostgresqlpivot-tableprepared-statement

Java Crosstab - preparedstatement query


I have a typical crosstab query with static parameters. It works fine with createStatement. I want to use preparestatement to query instead.

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
}

But it does not seem to work.

I get a PSQLException -

Can't use query methods that take a query string on a PreparedStatement.

Any ideas what I am missing?


Solution

  • You have fallen for the confusing type hierarchy of PreparedStatement extends Statement:

    PreparedStatement has the same execute*(String) methods like Statement, but they're not supposed to be used, just use the parameterless execute*() methods of PreparedStatement --- you already have given the actual query string to execute using conn.prepareStatement().