SQLite: Ne peut pas lier argument à l'indice 1, car l'index est hors de portée. La déclaration a 0 paramètres
J'obtiens l'erreur suivante, et je n'ai aucune idée pourquoi elle est en cours. Je me demandais si quelqu'un d'autre pourrait être en mesure de jeter un peu de 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();
- De ce que j'ai lu sur
query
méthode, il semble queselection
n'est pas un nom de colonne, mais une véritable clause where contenant éventuellement?
références àselectionArgs
. C'est,selection
devrait être comme"PlayerName=?"
, avecselectionArgs
une liste d'une valeur (code).
Vous devez vous connecter pour publier un commentaire.
La
selection
doit être une expression etselectionArgs
devrait avoir autant d'éléments qu'il y a?
littérale des espaces réservés dansselection
.Votre
selection
n'est pas une expression et n'a pas de?
mais vous avez un élément dansselectionArgs
.Vous voulez probablement quelque chose comme:
pour en faire une expression qui correspond au nom du joueur de la colonne contre le littéral vous êtes obligatoire dans
selectionArgs[0]
.'?'
. En supprimant les guillemets simples résolu l'erreur.Copié à partir de theblang du commentaire ci-dessus.