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

What does where().eq("colName", new SelectArg()) mean?

虽然 运行 通过我们应用程序中的一些旧代码,但我 运行 变成了这样的东西:

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

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

SELECT myFirstColumnName
WHERE mySecondColumnName = SELECT *

我以前从未见过,更不用说用过。 这样做的目的是什么?这可能是想做什么,结果会是什么?

queryBuilder.where()方法returns一个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

很好的回答@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 特殊字符(如引号),我们就会这样做。