我是新手使用SQL2和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返回了相同的数据集。我错过了什么吗?
答案 0 :(得分: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(...)