2015-12-10 44 views
0

通過在我們的應用中的一些舊的代碼運行時,我遇到了這樣的事情:where()。eq(「colName」,new SelectArg())是什麼意思?

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

其中queryBuildercom.j256.ormlite.stmt.QueryBuilder。現在,我不知道這是如何映射到SQL,但我想象這一點:

SELECT myFirstColumnName 
WHERE mySecondColumnName = SELECT * 

這是我從來沒有見過,請不要介意使用之前。 這是什麼目的?這可能會試圖做什麼,結果會是什麼?

回答

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特殊字符(如引號)的值。