- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个新鲜的QueryBuilder<Card, Integer>
,我想要orderByRaw
使用SelectArg
.
//String column is coming from unknown source
SelectArg selectArg = new SelectArg(SqlType.STRING, column);
qBuilder.selectColumns(column).groupBy(column).orderByRaw("? IS NULL ASC", selectArg);
在此之后我想得到 qBuilder.queryRaw()
。一些非常奇怪的事情发生了。 qBuilder
返回的原始语句是这样的:
SELECT `occupation` FROM `card` GROUP BY `occupation` ORDER BY ? IS NULL ASC
?
没有被替换为 occupation
在这里,正如预期的那样,空值在对象的排序中首先出现。
尽管如此,如果这样做:
qBuilder.selectColumns(column).groupBy(column).orderByRaw(column + " IS NULL ASC");
排序按预期工作(再次使用 qBuilder.queryRaw()
),空值排在最后,所有内容都按 occupation
排序。升序。
调试
protected abstract void appendStatementEnd(StringBuilder sb, List<ArgumentHolder> argList) throws SQLException;
上面的方法会添加SelectArgs
在 argList 中,然后 queryRaw()
仅使用 preparedStamenteString()
进行调用而不是任何 String... arguments
,这是很自然的,因为我首先使用 qBuilder.queryRaw()
这样调用它,导致调用以下方法:
public GenericRawResults<String[]> queryRaw() throws SQLException {
return dao.queryRaw(prepareStatementString());
}
如何使用orderByRaw
不用担心可能发生注入(inject)?
最佳答案
我真的不认为这是一个错误@venge。您的测试验证了查询字符串,但在执行查询时会将 ?
扩展为字符串 "testColumn"
,因此不会在那里扩展。您可以打开日志记录以查看是否正在运行正确的查询。如果不是,那么我们会看到有关没有指定列名 ?
或没有指定 ?
参数的问题。
2019-11-01 18:15:16,761 [TRACE] BaseMappedStatement prepared statement arguments: [testColumn] 2019-11-01 18:15:16,781 [DEBUG] StatementExecutor query of 'SELECT
testColumn
FROMtestobject
GROUP BYtestColumn
ORDER BY ? IS NULL ASC ' returned 4 results
我认为这里的问题是ORDER BY ... IN NULL ASC
。在阅读有关使用 NULL 的文档时,我对它应该做什么感到困惑。 ASC
或 DESC
似乎不会影响我的测试中的排序顺序。
关于java - ORMLite QueryBuilder.orderByRaw(String, SelectArg) 忽略 QueryBuilder.queryRaw() 上的 SelectArg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58427487/
我有一个新鲜的QueryBuilder ,我想要orderByRaw使用SelectArg . //String column is coming from unknown source Select
我需要在查询的 WHERE 条件中实现一个 CASE。我写了下面的代码: QueryBuilder carsQB = carsDao.queryBuilder(); carsQB.selectColu
我已经阅读了一些关于在 stackoverflow 上使用 SelectArg 和 ORMLite 文档的内容,但我看不出我做错了什么。 我正在搜索工作字段 =“运动员业务经理”的职业表。如您所见,它
好的,我正在尝试查询 sqlite 数据库。我试图做好并使用 SQLiteDatabase 的查询方法并传入 selectArgs 参数中的值以确保所有内容都已正确转义,但它不起作用。我从未返回任何行
在我们的应用程序中运行一些旧代码时,我遇到了这样的情况: queryBuilder.selectRaw("myFirstColumnName"); queryBuilder.where().eq("m
我正在使用 QueryBuilder 来构建稍后在原始 SQL 中使用的内部 SQL,以避免手动转义无效字符。 SelectArg friendsIN = new SelectArg(friendsU
我是一名优秀的程序员,十分优秀!