2011-11-09 4 views
3

저는 Postgres와 함께 Spring JbdcTemplate을 사용하고 있습니다. Postrgres JDBC 내부 준비된 문장 구현의 문제가 원인으로 빨려포스트 그레스의 여러 자리 표시 자 준비문

내 쿼리 문자열은 다음과 같습니다

private static final String SELECT_ALL_PARTIALLY = 
      "SELECT login, added FROM admin ORDER BY ? ? OFFSET ? LIMIT ?"; 

그리고 내가 좋아하는 그것을 사용하려면 :

List matches = getJdbcTemplate().query(SELECT_ALL_PARTIALLY, 
       (new Object[]{ 
        column, // "login" or "added" 
        order, // "asc" or "desc" 
        offset, 
        limit 
       }), 
       new RowMapper() { 
        ... 

문제를 다음과 같습니다. ...ORDER BY ? ? OFFSET...

org.postgresql.util.PSQLException: ERROR: syntax error at or near "$2" 
    Position: 61 
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102) 
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835) 
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388) 
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:273) 
    at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:648) ... 

이 두 자리 표시자를 어떻게 분리 할 수 ​​있습니까?

답변

1

Postgres에서는 주문 방향을 매개 변수로 지정할 수 없습니다. ascdesc 주문에 대해 서로 다른 쿼리 문자열을 만들고 실행 중 하나를 선택해야합니다.

+0

오. 확실합니까? Thats 아주 나쁜. 복수 열로 주문해야 할 경우 각 asc/desc 매개 변수의 조합에 대한 질의가 필요합니까? 이 문제를 해결할 수있는 방법이 있습니까? – user976426

+1

@ user976426 : 열 이름은 매개 변수로 지정할 수 있지만 방향 만 지정할 수는 없습니다. – axtavt