Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQLite: Cannot bind argument at index 1 because the index is out of range. The statement has 0 parameters

Tags:

android

sqlite

I'm getting the following error, and I have no idea why it is occurring. I was wondering if anyone else might be able to shed some light on the issue.

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) 

The code is here:

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(); 
like image 968
Jan Gorzny Avatar asked Dec 25 '13 23:12

Jan Gorzny


1 Answers

The selection should be an expression and selectionArgs should have as many elements as there are ? literal placeholders in selection.

Your selection is not an expression and does not have any ? but you have one element in selectionArgs.

You probably want something like:

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

to make it an expression that matches the player name column agains the literal you're binding in selectionArgs[0].

like image 157
laalto Avatar answered Sep 21 '22 04:09

laalto