반응형
SQLite : 인덱스가 범위를 벗어 났기 때문에 인덱스 1에서 인수를 바인딩 할 수 없습니다. 명령문에 0 개의 매개 변수가 있습니다.
다음과 같은 오류가 발생하는데 왜 발생하는지 모르겠습니다. 다른 사람이 문제에 대해 밝힐 수 있는지 궁금합니다.
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)
코드는 다음과 같습니다.
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
표현되어야하며 selectionArgs
만큼의 요소가 있어야 ?
리터럴 자리 selection
.
귀하 selection
는 표현식이 아니며 아무것도 가지고 있지 ?
않지만에 요소가 하나 selectionArgs
있습니다.
아마도 다음과 같은 것을 원할 것입니다.
String selection = PlayerEntry.COLUMN_NAME_PLAYER_NAME + "=?";
플레이어 이름 열과 일치하는 표현식을 다시 바인딩하려는 리터럴로 selectionArgs[0]
만듭니다.
제 경우에는 '?'와 같은 작은 따옴표 안에 물음표가있었습니다. 작은 따옴표를 제거하면 오류가 해결되었습니다.
Copied from theblang's comment above.
반응형
'Program Tip' 카테고리의 다른 글
persistence.xml 다른 트랜잭션 유형 속성 (0) | 2020.11.11 |
---|---|
Kibana + Elastic Search를 사용하여 필드의 고유 개수를 검색하는 방법 (0) | 2020.11.11 |
특정 확장자를 가진 파일을 재귀 적으로 찾기 (0) | 2020.11.11 |
새 활동에 대한 순환 표시 전환 (0) | 2020.11.11 |
Flask @ app.route에서 Python 콘솔로 인쇄하는 방법 (0) | 2020.11.11 |