2010-12-11 41 views
0

在我的搜索模塊中,我使用SQLite數據庫。有時我正在搜索兩個以上的值。所以我使用AND條件,有時只搜索一個值。這兩種情況我需要在單個查詢中實現。請幫幫我。如何在一個查詢中解決所有問題?

這是查詢:

Cursor dbcur = myDB.rawQuery("select * from "+dbtable+" where Status='"+item+"'AND ball_court='"+ball+"'AND Tovendor='"+vendor+"'", null); 

有時候我在尋找statusball_courttovendor有時我只是在尋找status。如何解決這個問題呢?

+0

注意,你可以通過它們的縮進四個空格格式的行作爲代碼。編輯器工具欄中的「101 \ n010」按鈕可以爲您做到這一點。單擊編輯器工具欄中的橙色問號以獲取更多信息和格式化提示。 – outis 2010-12-11 09:13:07

回答

0

構建查詢字符串的階段,而不是一次。如果你總是選擇反對狀態,把它放在基本的WHERE子句中,然後添加任何附加的表達式。使用參數(您可以使用SQLiteDatabase.query)而不是將值連接到查詢本身以防止SQL注入。 dbtable最好不要來自不受信任的來源(例如用戶,數據庫本身)。我的Java是有些生疏,但你可以試試下面的啓動:

List<String> argList = new LinkedList<String>(); 

String selection = "Status=?"; 
argList.add(item); 
if (ball != null && ball.length()) { 
    selection += " AND ball_court=?"; 
    argList.add(ball); 
} 
if (vendor != null && vendor.length()) { 
    selection += " AND Tovendor=?"; 
    argList.add(vendor); 
} 

String[] argArray = new String[argList.length()]; 
argList.toArray(argArray); 
// columns is a String[] of column names 
Cursor dbcur = myDB.query(false, dbtable, columns, selection, argArray, null, null, null); 

而不是追加的字符串,您可能需要使用一個StringBuilder

至於SELECT *,請閱讀「What is the reason not to use SELECT *?

-1

如果您發佈示例查詢以及您可能搜索的內容,您可能會得到一些答案!我不完全瞭解你的問題,因爲我會/應該能夠幫助你。

+0

Cursor dbcur = myDB.rawQuery(「select * from」+ dbtable +「where Status ='」+ item +「'AND ball_court ='」+ ball +「'AND Tovendor ='」+ vendor +「'」,null); .. ............這是我的查詢。有時候我正在尋找狀態和ball_court,tovendor和一些我只搜索狀態。如何解決這個問題.......幫助我。 ........ – user533787 2010-12-11 07:48:09

+0

@ user538689:由於您的回答並未真正回答問題,因此您可能已被降低評分。通常情況下,你的帖子應該是一個評論,但你至少需要50個代表發表評論他人的問題。對於downvoter:user538689的「答案」應該是一個評論,但user538689不能發表評論。 – outis 2010-12-11 09:58:37