我的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 + " = ?"
答案 0 :(得分:4)
不要把你的?用单引号表示字符串参数;在单引号中?被视为文字字符串而不是作为参数占位符 - SQLite将知道传递的参数的类型?所以你不必引用它。
你编写它的方式有四个参数,查询中只有两个参数占位符,所以异常。