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

我得到下面的错误,我不知道为什么会发生。我想知道是否有其他人可以解释一下这个问题。

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)

密码在这里:

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();
37770 次浏览

selection应该是一个表达式,selectionArgs应该有 selection?文字占位符一样多的元素。

您的 selection不是一个表达式,也没有任何 ?,但是在 selectionArgs中有一个元素。

你可能想要这样的东西:

String selection =  PlayerEntry.COLUMN_NAME_PLAYER_NAME + "=?";

使其成为与 selectionArgs[0]中要绑定的文字相匹配的球员名称列的表达式。

在我的例子中,我在单引号中加了一个问号,比如“ ?”.删除单引号解决了错误。

抄袭了上面布朗的评论。