where()。eq(" colName",new SelectArg())是什么意思?

时间:2015-12-10 22:07:55

标签: java android ormlite

在我们的应用程序中运行一些旧代码时,我遇到了类似这样的事情:

queryBuilder.selectRaw("myFirstColumnName");
queryBuilder.where().eq("mySecondColumnName", new SelectArg());

其中queryBuildercom.j256.ormlite.stmt.QueryBuilder。现在,我不知道这是如何映射到SQL的,但我想象这个:

SELECT myFirstColumnName
WHERE mySecondColumnName = SELECT *
我之前从未见过,从未使用过的。 这是什么目的?这可能会尝试做什么,结果会是什么?

2 个答案:

答案 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