Java Crosstab - подготовленный запрос - PullRequest
10 голосов
/ 15 октября 2011

У меня типичный перекрестный запрос со статическими параметрами. Он отлично работает с createStatement. Вместо этого я хочу использовать готовое состояние для запроса.

         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
         }

Но, похоже, это не работает.

Я получаю исключение PSQLE - Не удается использовать методы запроса, которые принимают строку запроса в PreparedStatement.

Есть идеи, что мне не хватает?

Ответы [ 2 ]

19 голосов
/ 15 октября 2011

Вы попали в запутанную иерархию типов PreparedStatement extends Statement:

PreparedStatement имеет те же execute*(String) методы, что и Statement, но они не должны использоваться, просто используйте без параметров execute*() методы PreparedStatement --- вас уже дали фактическую строку запроса для выполнения, используя conn.prepareStatement().

7 голосов
/ 15 октября 2011

Пожалуйста, попробуйте:

String query = "...";
PreparedStatement stat = conn.prepareStatement(query);
ResultSet rs = stat.executeQuery();
while (rs.next()) {
  // TODO
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...