J'obtiens l'erreur suivante, et je n'ai aucune idée pourquoi cela se produit. Je me demandais si quelqu'un d'autre pourrait faire la lumière sur la question.
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)
Le code est ici:
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();
selection
doit être une expression et selectionArgs
doit avoir autant d'éléments qu'il y a ?
espaces réservés littéraux dans selection
.
Votre selection
n'est pas une expression et n'a pas de ?
mais vous avez un élément dans selectionArgs
.
Vous voulez probablement quelque chose comme:
String selection = PlayerEntry.COLUMN_NAME_PLAYER_NAME + "=?";
pour en faire une expression qui correspond à la colonne du nom du joueur contre le littéral que vous liez dans selectionArgs[0]
.
Dans mon cas, j'avais le point d'interrogation entre guillemets simples comme celui-ci "?". La suppression des guillemets simples a résolu l'erreur.
Copié du commentaire de theblang ci-dessus.