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();
1 ответ:
The
selection
должно быть выражение иselectionArgs
должно быть столько элементов, сколько есть?
буквальный текст вselection
.код
selection
не является выражением и не имеет никакого?
но у вас есть один элементselectionArgs
.вы, наверное, хотите что-то вроде:
String selection = PlayerEntry.COLUMN_NAME_PLAYER_NAME + "=?";
чтобы сделать его выражением, которое соответствует столбцу имени игрока, вы связываете литерал в
selectionArgs[0]
.