我不能得到WHERE IN子句在Android SQLite數據庫上工作。Android的sqlite中的WHERE IN子句?
有什麼辦法可以在android中執行這樣的語句嗎? :
SELECT body FROM table1 WHERE title IN ('title1', 'title2', 'title3')
我不能得到WHERE IN子句在Android SQLite數據庫上工作。Android的sqlite中的WHERE IN子句?
有什麼辦法可以在android中執行這樣的語句嗎? :
SELECT body FROM table1 WHERE title IN ('title1', 'title2', 'title3')
如果您使用的是內容提供商可以使用查詢功能,例如:
getContentResolver().query(URI,new String[] {"body"}, "title IN ?", new String[] {"('title1','title2','title3')"}, null)
注意,我還沒有測試過,但根據文檔,這應該工作。
這樣
Cursor mCursor = SQLiteDatabase.query(true, "Name of table","String array of selection columns","title in ('title1', 'title2', 'title3')", null, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
請看一看這個answer的另一種方式。它在類似的情況下幫助我。
String[] names = { "name1", "name2" }; // do whatever is needed first
String query = "SELECT * FROM table" + " WHERE name IN (" + makePlaceholders(names.length) + ")";
Cursor cursor = mDb.rawQuery(query, names);
此處的要點是提供可變問號佔位符(?)以匹配您的IN子句項目。當然 - 它們是String數組的參數。
你知道如何用INT []數組來做到這一點嗎? IN所適用的列是INTEGER類型。 – Brabbeldas 2015-05-15 13:02:51
你必須將你的任意數組轉換爲String [] – Anatoliy 2015-05-27 17:24:57
您可以使用TextUtils.join(",", parameters)
採取sqlite的綁定參數,其中parameters
是"?"
佔位符和結果字符串列表的優點是像"?,?,..,?"
。
這裏是一個小例子:
Set<Integer> positionsSet = membersListCursorAdapter.getCurrentCheckedPosition();
List<String> ids = new ArrayList<>();
List<String> parameters = new ArrayList<>();
for (Integer position : positionsSet) {
ids.add(String.valueOf(membersListCursorAdapter.getItemId(position)));
parameters.add("?");
}
getActivity().getContentResolver().delete(
SharedUserTable.CONTENT_URI,
SharedUserTable._ID + " in (" + TextUtils.join(",", parameters) + ")",
ids.toArray(new String[ids.size()])
);
謝謝。這幫了我很多。我不知道我必須爲「IN」子句中的每個參數提供一個單獨的佔位符('?')。我認爲只有一個String參數的單個佔位符就足夠了。 – stan0 2017-03-08 14:12:10
這是你怎麼做到的? String where = ContactsContract.RawContacts.CONTACT_ID +「IN(??)」; – 2017-05-17 12:59:41
添加到克里斯蒂安答案: 儘管他的回答會的工作,你應該嘗試使用查詢的正確方法:
db.rawQuery("Select * from table1 where title = ?", new String[]{param1});
這方法也可以與WHERE IN子句一起使用,但傳遞的字符串必須採用'asd','zxc','qwe'格式
喜歡這個:
String param1 = "\'asd\',\'zxc\',\'qwe\'";
db.rawQuery("Select * from table1 where title in (?)", new String[]{param1});
你有什麼異常?你的代碼是什麼樣的? – Maximus 2011-06-06 22:46:30