在我们的应用程序中运行一些旧代码时,我遇到了类似这样的事情:
queryBuilder.selectRaw("myFirstColumnName");
queryBuilder.where().eq("mySecondColumnName", new SelectArg());
其中queryBuilder
是com.j256.ormlite.stmt.QueryBuilder
。现在,我不知道这是如何映射到SQL的,但我想象这个:
SELECT myFirstColumnName
WHERE mySecondColumnName = SELECT *
我之前从未见过,从未使用过的。 这是什么目的?这可能会尝试做什么,结果会是什么?
答案 0 :(得分:4)
很好的答案@novak。只是添加一些信息:
queryBuilder.where().eq("mySecondColumnName", new SelectArg());
这是一种奇怪的模式。 SelectArg
的典型用法是创建变量,以便稍后设置该值。例如:
SelectArg arg = new SelectArg();
queryBuilder.where().eq("mySecondColumnName", arg);
...
arg.setValue("column1");
有时我们预先知道参数的值,但我们仍然希望使用SQL ?
机制,以便我们可以这样做:
queryBuilder.where().eq("mySecondColumnName", new SelectArg("column1"));
我们这样做,例如,当我们想要保护自己免受SQL injection attacks或我们使用具有SQL特殊字符(如引号)的值时。
答案 1 :(得分:3)
queryBuilder.where()
方法返回com.j256.ormlite.stmt.Where<T,ID>
。
eq()
方法为where
条件创建等于比较。
生成的SQL查询将是:
SELECT myFirstColumnName WHERE mySecondColumnName = ?
new SelectArg()
将是?
的值。
此文档参考: http://ormlite.com/javadoc/ormlite-core/com/j256/ormlite/stmt/Where.html