SQLiteDatabase IllegalArgumentException

时间:2017-04-28 16:47:32

标签: android android-sqlite

我无法使用自定义ContentProvider查询我的SQLiteDatabase。我正在尝试使用' user_id'查询一个用户的数据库。与该问题相关的以下代码段是:

DBProvider.java

@Override
    public Cursor query(Uri uri, String[] projection, String selection,
                            String[] selectionArgs, String sortOrder){
        int match_code = myUriMatcher.match(uri);
        Cursor c;
        switch (match_code){
            case USER_BY_ID: {
                c = dbHelper.getReadableDatabase().query(
                        DBContract.User_Table.TABLE_NAME,
                        projection,
                        DBContract.User_Table.COLUMN_ID + "='" + ContentUris.parseId(uri) + "'",
                        selectionArgs,
                        null,
                        null,
                        sortOrder
                );
                break;
            }
            default:
                throw new UnsupportedOperationException("Not yet implemented");
        }
        c.setNotificationUri(getContext().getContentResolver(), uri);
        return c;
}

ProfileActivity.java

// Columns to load
        String[] columns = {
                DBContract.User_Table.COLUMN_NAME // String "name"
        };
// A cursor is your primary interface to the query results.
        Cursor cursor = getActivity().getContentResolver().query(
                ContentUris.withAppendedId(DBContract.User_Table.CONTENT_URI, Long.parseLong(id)), // Table to Query
                columns, // Columns for the WHERE
                DBContract.User_Table.COLUMN_ID, // selection
                new String[]{"1"}, // Values for the WHERE
                null // Sort Args
        );

我得到的错误是:

java.lang.IllegalArgumentException: Cannot bind argument at index 1 because the index is out of range.  The statement has 0 parameters.

任何帮助将不胜感激! 感谢

1 个答案:

答案 0 :(得分:0)

您应该使用:

Cursor cursor = getActivity().getContentResolver().query(
                ContentUris.withAppendedId(DBContract.User_Table.CONTENT_URI, Long.parseLong(id)), // Table to Query
                columns, // Columns for the WHERE
                DBContract.User_Table.COLUMN_ID, // selection
                null, // Values for the WHERE
                null // Sort Args
        );

您使用的selectionArgs参数错误。您在?参数中没有任何selection,并且绑定失败。 documentation

中的更多信息
  

selectionArgs - 你可以在选择中加入?   由selectionArgs中的值替换为它们的顺序   出现在选择中。这些值将绑定为字符串。