SQLite:无法绑定索引1处的参数,因为索引超出范围.该语句有0个参数

Jan*_*zny 67 sqlite android

我收到以下错误,我不知道它为什么会发生.我想知道是否还有其他人可以对这个问题有所了解.

12-25 22:52:50.252: E/AndroidRuntime(813): Caused by: java.lang.IllegalArgumentException: Cannot bind argument at index 1 because the index is out of range.  The statement has 0 parameters.
12-25 22:52:50.252: E/AndroidRuntime(813):  at android.database.sqlite.SQLiteProgram.bind(SQLiteProgram.java:212)
12-25 22:52:50.252: E/AndroidRuntime(813):  at android.database.sqlite.SQLiteProgram.bindString(SQLiteProgram.java:166)
12-25 22:52:50.252: E/AndroidRuntime(813):  at android.database.sqlite.SQLiteProgram.bindAllArgsAsStrings(SQLiteProgram.java:200)
12-25 22:52:50.252: E/AndroidRuntime(813):  at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:47)
12-25 22:52:50.252: E/AndroidRuntime(813):  at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
12-25 22:52:50.252: E/AndroidRuntime(813):  at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1161)
12-25 22:52:50.252: E/AndroidRuntime(813):  at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1032)
12-25 22:52:50.252: E/AndroidRuntime(813):  at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1200)
Run Code Online (Sandbox Code Playgroud)

代码在这里:

public Player getPlayer(String name) {
    SQLiteDatabase db = this.getReadableDatabase();

    String[] projection = {
            PlayerEntry.COLUMN_NAME_PLAYER_NAME,
            PlayerEntry.COLUMN_NAME_PLAYED_GAMES,
            };

    String selection =  PlayerEntry.COLUMN_NAME_PLAYER_NAME ;
    String[] selectionArgs = new String[1];
    selectionArgs[0] = name;

    Cursor cursor = db.query(
            PlayerEntry.TABLE_NAME,  // The table to query
            projection,                               // The columns to return
            selection,                                // The columns for the WHERE clause
            selectionArgs,                            // The values for the WHERE clause
            null,                                     // don't group the rows
            null,                                     // don't filter by row groups
            null                                 // The sort order
            );

    if (cursor != null)
        cursor.moveToFirst();
Run Code Online (Sandbox Code Playgroud)

laa*_*lto 111

selection应该是一个表达和selectionArgs作为有应该有尽可能多的元件?在字面的占位符selection.

selection不是一个表达,没有任何表达,?但你有一个元素selectionArgs.

你可能想要这样的东西:

String selection =  PlayerEntry.COLUMN_NAME_PLAYER_NAME + "=?";
Run Code Online (Sandbox Code Playgroud)

使它成为一个表达式,与你绑定的文字再次匹配玩家名称列selectionArgs[0].

  • 在我的情况下,我在单引号内有问号,就像这个`'?'`.删除单引号解决了错误. (46认同)
  • @mattblang我认为将你的评论添加到一个新的答案是一个好主意,这样可以帮助更多像我这样的人.感觉好像尝试一下? (3认同)