0

MySQL で SQL2O を使用するのは初めてですが、さまざまなクエリが同じ結果を返すという奇妙な問題が発生しています。SQL2O はキャッシュされた結果を返しますか?

私のコードは次のようになります。

String sql = "SELECT * " +
             "FROM report_A" +
             "ORDER BY :order :sequence "+
             "LIMIT :from, :limit";
    int limit = 5;
    int startIndex = (page-1)*limit;
    String sequence = "DESC";
    try(Connection con = sql2o.open()) {

        if(order.contains("-")){
            order = order.replace("-", "");
            sequence= " ASC";
        }
        Query query= con.createQuery(sql)
                .addParameter("from", startIndex)
                .addParameter("limit", limit)
                .addParameter("order", order) 
                .addParameter("sequence", sequence); 

        List<ReportA> result = query.executeAndFetch(ReportA.class);
        con.close();

4 つのパラメーターは常に変化しますが、出力は同じままです。mysql ワークベンチでクエリを確認しました。データは異なりますが、SQL2O は同じデータ セットを返します。何か不足していますか?

4

1 に答える 1

0

あなたのクエリは無効です。実行時にコンパイルして Sql2oException をスローしません。

問題は、基本的に、テーブル名、列名、または「ASC」などの他のキーワードではなく、値に対してのみパラメーターを使用できることです。それらを変更すると、クエリの構造が変更されます。

古き良き文字列連結により、可変構造のクエリを構築することが可能です。

String sql = "SELECT * " +
         "FROM report_A" +
         "ORDER BY " + order " " + SEQUENCE +
         "LIMIT :from, :limit";

その後

query(sql)
    .addParameter("from", from)
    .addParameter("limit", limit)
    .executeAndFetch(...)
于 2018-06-05T13:29:47.883 に答える