获取SQLiteException并且我不确定是什么导致它

时间:2011-07-08 20:57:30

标签: android sqlite

我的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_LOCATIONC_TESTSC_LASTC_FIRST是我的数据库中的列。lastNamefirstName方法参数是不言自明的。)

编辑:我不得不使用antlersoft的解决方案来使其工作。如果遇到同样问题的其他人在这个问题上遇到麻烦,我的解决方案是将selection更改为:

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

1 个答案:

答案 0 :(得分:4)

不要把你的?用单引号表示字符串参数;在单引号中?被视为文字字符串而不是作为参数占位符 - SQLite将知道传递的参数的类型?所以你不必引用它。

你编写它的方式有四个参数,查询中只有两个参数占位符,所以异常。