2011-11-09 11 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) ... 
です

この2つのプレースホルダなどはどうやって分けることができますか?

答えて

1

Postgresでは、注文の方向をパラメータとして指定することはできません。 ascdescオーダーの異なるクエリ文字列を作成し、実行するにはそのうちの1つを選択する必要があります。

+0

ああ。本気ですか?それはかなり悪いです。複数の列で注文する必要がある場合、asc/descパラメータの組み合わせごとにクエリを行う必要がありますか?これにはいくつかの回避策がありますか? – user976426

+1

@ user976426:列名はパラメータとして指定できますが、方向は指定できません。 – axtavt

関連する問題