Ich erhalte den folgenden Fehler und habe keine Ahnung, warum er auftritt. Ich habe mich gefragt, ob jemand anderes in der Lage sein könnte, etwas Licht in das Thema zu bringen.
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)
Der Code ist hier:
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();
query
Methode gelesen habe , scheint esselection
sich nicht um einen Spaltennamen zu handeln, sondern um eine vollständige WHERE-Klausel, die möglicherweise?
Verweise auf enthältselectionArgs
. Das heißt,selection
sollte so sein"PlayerName=?"
,selectionArgs
als wäre es eine Liste mit einem Wert (wie in Ihrem Code).Antworten:
Das
selection
sollte ein Ausdruck sein undselectionArgs
so viele Elemente enthalten, wie?
wörtliche Platzhalter enthaltenselection
.Dein
selection
ist kein Ausdruck und hat keinen,?
aber du hast ein Element inselectionArgs
.Sie möchten wahrscheinlich etwas wie:
Damit es sich um einen Ausdruck handelt, der mit der Spalte für den Spielernamen übereinstimmt, wird das Literal, in das Sie binden, verwendet
selectionArgs[0]
.quelle
'?'
. Durch Entfernen der einfachen Anführungszeichen wurde der Fehler behoben.Aus dem obigen Kommentar von theblang kopiert.
quelle