Получение SQLiteException, и я не уверен, что его вызывает - PullRequest
1 голос
/ 09 июля 2011

Мое приложение Android падает с этой ошибкой:

E/AndroidRuntime(  315): Caused by: android.database.sqlite.SQLiteException: bind or column index out of range: handle 0x3470a0
...
E/AndroidRuntime(  315):        at lee.medical.icu.dataentry.db.PatientInfoDbHelper.getTests(PatientInfoDbHelper.java:163)

На этот бит кода натыкается:

SQLiteDatabase db = dbHelper.getReadableDatabase();
String[] columns = {C_LOCATION, C_TESTS};
String selection = "? = '?' and ? = '?'";
String[] selectionArgs = {C_LAST, lastName, C_FIRST, firstName};
Cursor cursor = db.query(TABLE, columns, selection, selectionArgs,
        null, null, null); // line 163

Что может означать эта ошибка?

(пара замечаний: C_LOCATION, C_TESTS, C_LAST и C_FIRST - это столбцы в моей базе данных. lastName и firstName - аргументы метода, которые не требуют пояснений.)

Редактировать : Мне пришлось немного поиграть с решением antlersoft, чтобы оно заработало. В случае, если кто-то с такой же проблемой сталкивается с этим вопросом, решение в моем случае состояло в том, чтобы изменить selection на:

String selection = C_LAST + " = ? and " + C_FIRST + " = ?"

1 Ответ

4 голосов
/ 09 июля 2011

Не ставь свой?в одинарных кавычках для строковых аргументов;в одинарных кавычках?принимается как буквенная строка, а не как заполнитель аргумента - SQLite будет знать тип передаваемого аргумента как?и поэтому вам не нужно его заключать в кавычки.

В том виде, в котором вы его написали, в вашем запросе четыре аргумента и только два аргумента-заполнителя и, следовательно, исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...