android - "selectionArgs"在包含 "selection"的 "?"查询中不起作用

标签 android sqlite

当我在查询中使用 selectionArgs 时,应用程序崩溃 日志

12-30 22:22:05.406: ERROR/AndroidRuntime(532): FATAL EXCEPTION: main
    android.database.sqlite.SQLiteException: near "?": syntax error: , while compiling: DELETE FROM _history WHERE _id in ?
    at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
    at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:68)
    at android.database.sqlite.SQLiteProgram.compileSql(SQLiteProgram.java:143)
    at android.database.sqlite.SQLiteProgram.compileAndbindAllArgs(SQLiteProgram.java:361)
    at android.database.sqlite.SQLiteStatement.acquireAndLock(SQLiteStatement.java:260)
    at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:84)
    at android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java:1741)
    at ru.sofron.money.db.DataProvider.delete(DataProvider.java:201)
    at android.content.ContentProvider$Transport.delete(ContentProvider.java:213)
    at android.content.ContentResolver.delete(ContentResolver.java:822)
    at ru.sofron.money.activities.HistoryFragment$1.onActionItemClicked(HistoryFragment.java:126)
    at android.widget.AbsListView$MultiChoiceModeWrapper.onActionItemClicked(AbsListView.java:5648)
    at com.android.internal.policy.impl.PhoneWindow$DecorView$ActionModeCallbackWrapper.onActionItemClicked(PhoneWindow.java:2473)
    at com.android.internal.app.ActionBarImpl$ActionModeImpl.onMenuItemSelected(ActionBarImpl.java:757)
    at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
    at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
    at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
    at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:490)
    at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:108)
    at android.view.View.performClick(View.java:3511)
    at android.view.View$PerformClick.run(View.java:14105)
    at android.os.Handler.handleCallback(Handler.java:605)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4424)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    at dalvik.system.NativeStart.main(Native Method)

使用

String selection = DBColumns.History._ID + " in ?";
                String selectionArgs[] = new String[1];
                selectionArgs[0] = Arrays.toString(mListView.getCheckedItemIds());
                    getActivity().getContentResolver()
                            .delete(DataProvider.HISTORY_URI,
                                    selection,
                                    selectionArgs);

在内容提供者中删除

    public int delete(Uri uri, String selection, String[] selectionArgs) {
    int uriType = uriMatcher.match(uri);
    int rowsDeleted;
    switch (uriType) {
        case HISTORY:{
            rowsDeleted = mDb.delete(DBColumns.History.TABLE_NAME, selection,selectionArgs);
        }break;
...

其他查询也有类似情况。 有谁知道问题出在哪里?

最佳答案

您必须为每个值使用一个 ?...

String selection = DBColumns.History._ID + " in (?, ?, ?)";
String selectionArgs[] = new String[]{"1","2","3"};

或者(来自 IN clause and placeholders 中的一个想法)

String selectionArgs[] = new String[]{"1","2","3"};
String selection = DBColumns.History._ID + " in (";
for(int i = 0; i < selectionArgs.length; i++)
    selection += "?, ";
selection = selection.substring(0, selection.length() - 2) + ")";
// selection is 'DBColumns.History._ID + " in (?, ?, ?)"'

Sorry my English

我们都说 Android。 :)

关于android - "selectionArgs"在包含 "selection"的 "?"查询中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14084726/

相关文章:

java - 从移动设备到 PC 的 UDP 多播

SQLite:*防止* PRIMARY KEY 值在删除所有行后重置

c# - DataGridView 不显示 DataTable

Android SQLite 插入-选择

java - 如何从Json对象中获取数据?

android - Place Picker 不工作并消失

android - 在 android 中跟踪已安装 apk 的日志

python - 导入错误 : No module named _sqlite3 (even after doing eveything)

sqlite - 社区Sqlite无法正确处理日期和日期时间

java - 如何使用 AChartEngine 绘制双 Y 轴(辅助 Y 轴) - Android