在我们的应用程序中运行一些旧代码时,我遇到了这样的情况:
queryBuilder.selectRaw("myFirstColumnName");
queryBuilder.where().eq("mySecondColumnName", new SelectArg());
其中queryBuilder
是com.j256.ormlite.stmt.QueryBuilder
。现在,我不知道这如何映射到 SQL,但我想象一下:
SELECT myFirstColumnName
WHERE mySecondColumnName = SELECT *
我以前从未见过,更不用说使用过。 这样做的目的是什么?这可能会尝试做什么,结果会是什么?
最佳答案
很好的答案@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 特殊字符(如引号)的值。
关于java - where().eq ("colName", new SelectArg()) 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34212641/