2011-10-15 34 views
7

Tôi có truy vấn chéo bảng thông thường với tham số tĩnh. Nó hoạt động tốt với createStatement. Thay vào đó, tôi muốn sử dụng preparestatement để truy vấn.Java Crosstab - truy vấn chuẩn bị

  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 
     } 

Nhưng có vẻ như nó không hoạt động.

Tôi nhận được PSQLException - Không thể sử dụng các phương thức truy vấn nhận chuỗi truy vấn trên PreparedStatement.

Bất kỳ ý tưởng nào tôi đang thiếu?

Trả lời

15

Bạn đã giảm cho các loại hệ thống phân cấp khó hiểu của PreparedStatement extends Statement:

PreparedStatementexecute*(String) phương pháp tương tự như Statement, nhưng chúng không phải được sử dụng, chỉ cần sử dụng các phương thức không tham sốexecute*() của PreparedStatement --- bạn đã cho chuỗi truy vấn thực tế thực thi bằng cách sử dụng conn.prepareStatement().

6

Vui lòng thử:

String query = "..."; 
PreparedStatement stat = conn.prepareStatement(query); 
ResultSet rs = stat.executeQuery(); 
while (rs.next()) { 
    // TODO 
} 
Các vấn đề liên quan