9

是否有一种为 Android 的 Ormlite 转义字符串的本机方式?

例如,如果我想提供一个字符串:ormlite's escape func,它需要作为 ormlite\'s escape func 提供。

TestDao.queryForFirst(TestDao.queryBuilder().where().like("stats", stats)
    .prepare())

我尝试使用 UpdateBuilder 的 escapeValue 方法,但它只进行了以下更改:'ormlite's escape func'。它在语句的开头和结尾添加单引号。是否有对转义字符串的本机支持以保证 sql 注入安全?

如果没有,有什么方法可以做到?

谢谢!

4

1 回答 1

17

我尝试使用 UpdateBuilder 的 escapeValue 方法,但它只进行了以下更改:'ormlite's escape func'。它在语句的开头和结尾添加单引号。是否有对转义字符串的本机支持以保证 sql 注入安全?

这是一个常见问题解答。执行此操作的正确方法是使用SelectArg参数,以便 SQL 可以使用 ? 构造类型。这是另一个关于这个的问题。

SelectArg selectArg = new SelectArg(stats);
TestDao.queryForFirst(
    TestDao.queryBuilder().where().like("stats", selectArg).prepare());

这是有关select-arg 功能的文档。

编辑:

正如@Moritz 指出的那样,如果您实际上是在更新数据库,您还可以使用SelectArgwith UpdateBuilder

SelectArg arg = new SelectArg("Some value");
updateBuilder.updateColumnValue(MY_COLUMN, arg);
于 2011-07-06T14:39:04.407 回答