0

我是使用 SQL2O 和 MySQL 的新手,但我遇到了一个奇怪的问题,不同的查询返回相同的结果。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 workbench中的查询,数据是不同的,但是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 回答