簡體   English   中英

ContentResolver.query(...)中的selectionArgs可以是子查詢嗎?

[英]selectionArgs in ContentResolver.query(…) can be a subquery?

我在Android上使用SQLite。
我使用ContentProvider從db查詢數據。 現在,嘗試通過ContentResolver使用子查詢時遇到問題

String selection = "cat_id NOT IN ?"
String[] selectionArgs = new String[]{"(SELECT Categories.id FROM Categories)"}
cursor = mResolver.query(getContentUri(), getListColumns(),
                    selection, selectionArgs, orderBy);

這是錯誤:

08-06 10:32:36.070: E/AndroidRuntime(2151): Caused by: android.database.sqlite.SQLiteException: near "?": syntax error (code 1): , while compiling: SELECT * FROM TRANSACTIONS WHERE cat_id NOT IN ? ORDER BY time_created ASC, id ASC`

我的問題是“我可以使用selectionArgs作為子查詢嗎?”
我的目的是“獲取cat_id不在類別表中的事務列表”。
誰能幫我?

別忘記了嗎? 實際上是一個值的占位符。 以后哪個將被android綁定。

因此,您不會將查詢替換為?。 作為使用點? 是確保sql代碼不是由用戶參數注入的。

String selection = "cat_id NOT IN ?"
String[] selectionArgs = new String[]{"(SELECT Categories.id FROM Categories)"}
cursor = mResolver.query(getContentUri(), getListColumns(), selection, selectionArgs, orderBy);

和你一樣寫作就像

String selection = "cat_id NOT IN '(SELECT Categories.id FROM Categories)'"

你想要運行的查詢實際上是作為一個值,這意味着NOT IN '(some value)'不是有效的sql。

我建議你刪除? 並將其替換為您將在其中修復它的where參數中的查詢。

你會用的嗎? 像這樣的占位符(如果你知道它不必是什么)。

String selection = "cat_id NOT IN (?, ?)"
String[] selectionArgs = new String[]{"value1", "value2"}
cursor = mResolver.query(getContentUri(), getListColumns(), selection, selectionArgs, orderBy);

編輯:試試

String selection = "cat_id NOT IN (SELECT Categories.id FROM Categories)"
cursor = mResolver.query(getContentUri(), getListColumns(), selection, null, orderBy);

我給你一個應該工作的例子(在我的情況下更新ContentResolver方法):

String selection =  DatabaseContract.EventTable.Column.ID_EVENT + " IN (SELECT DISTINCT "
    + DatabaseContract.CountryEventTable.Column.EVENT_ID + " FROM "
    + DatabaseContract.CountryEventTable.TABLE_NAME + " WHERE "
    + DatabaseContract.CountryEventTable.Column.COUNTRY_CODE + "=?)";

String [] selectionArgs = new String[]{
    data[0],
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM