2014-05-12 61 views
2

我對內容解析器查詢下面的代碼:安卓:SQLite的 - 查詢在selectionArgs兩個數組以及其他字符串值

String selection = Columns.NAME + "=? and " + Columns.AVAILABILITY + "=?"; 
String[] selectionArgs = { name, true }; 
Cursor c = getContentResolver().query(Columns.URI, null, selection, selectionArgs, null); 

此代碼是工作的罰款,因爲我只有一個名字,但現在我有一個名稱數組,只有當它們的可用性爲真時,才能將其添加到遊標中。即,我的方案是我想將這些行放在遊標中,只有當它們的可用性爲真時,它們才具有任何名稱(存在於數組中)。

我該如何做到這一點?

+0

你會得到任何錯誤? –

回答

5

SQL具有用於此的IN operator

String selection = Columns.NAME + " IN (?,?,?) AND" + 
        Columns.Availability + " = ?"; 
String[] selectionArgs = { name[0], name[1], name[2], true }; 
... 

如果數組的大小不是預定的,必須構造selection串和動態的selectionArgs數組:

String selection = Columns.NAME + " IN (" + makePlaceholders(names.length) + ")" + 
        " AND " + Columns.Availability + " = ?"; 
String[] selectionArgs = new String[names.length + 1]; 
for (int i = 0; i < names.length; i++) 
    selectionArgs[i] = names[i]; 
selectionArgs[names.length] = true; 
... 

帶功能makePlaceholders複製自this answer

String makePlaceholders(int len) { 
    StringBuilder sb = new StringBuilder(len * 2 - 1); 
    sb.append("?"); 
    for (int i = 1; i < len; i++) 
     sb.append(",?"); 
    return sb.toString(); 
} 
+0

是的,數組大小和值不是預先確定的。你能解釋我現在怎麼做。 – user1851261

+0

[Java:將列表轉換爲join()d string](http://stackoverflow.com/questions/1751844/java-convert-liststring-to-a-joind-string); [如何將新元素添加到數組?](http://stackoverflow.com/questions/2843366/how-to-add-new-elements-to-an-array) –

相關問題