Android SQLite:无法在索引 1 处绑定参数,因为该索引超出范围。该语句有 0 个参数
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/20777533/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
SQLite: Cannot bind argument at index 1 because the index is out of range. The statement has 0 parameters
提问by Jan Gorzny
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();
回答by laalto
The selection
should be an expression and selectionArgs
should have as many elements as there are ?
literal placeholders in selection
.
Theselection
应该是一个表达式,并且selectionArgs
应该有与 中的?
文字占位符一样多的元素selection
。
Your selection
is not an expression and does not have any ?
but you have one element in selectionArgs
.
您selection
的不是一个表达式,也没有任何表达式,?
但是您在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]
.
使其成为与玩家名称列再次匹配的表达式selectionArgs[0]
。
回答by AJP
In my case I had the question mark inside single quotes like this '?'. Removing the single quotes resolved the error.
在我的情况下,我在单引号内有一个问号,如“?”。删除单引号解决了错误。
Copied from theblang's comment above.
复制自上面 theblang 的评论。