运行此查询以从内部 Android 数据库获取数据并分配给游标:
Cursor cursor = db.query(TABLE_NAME,
new String[] { KEY_ID, KEY_NAME, KEY_SURNAME },
KEY_ID + "=?",
new String[] { String.valueOf(name) }, null, null, null);
if (cursor != null)
cursor.moveToFirst();
Record rec = new Record(cursor.getString(0), cursor.getString(1), cursor.getString(2));
应用程序在执行此代码时崩溃。
异常:CursorIndexOutOfBoundsException:请求索引 -1,大小为 0
。
这是否是因为 KEY_ID 中没有值,因为我在运行此方法之前没有添加任何行?
最佳答案
没有。 query()
不应终止应用程序。但是,如果出现问题,它会抛出异常,您很可能不会 try catch 该异常,这会杀死您的应用程序。无论如何,我会检查 a) logcat 输出以获取崩溃堆栈跟踪或以下几行 - 您可能只是假设总是有数据返回并尝试在那里访问它,从而导致崩溃。
您应该始终检查查询是否返回任何内容,例如:
Cursor cursor = mDb.query(....);
if( cursor.getCount() > 0 ) {
cursor.moveToFirst();
.....
}
或者简单地
Cursor cursor = mDb.query(....);
if( cursor.moveToFirst() ) {
.....
}
因为您可以轻松获得有效的非null
游标,它不包含任何数据(返回零行)。尝试从此类游标访问不存在的数据将导致抛出异常(如果未捕获异常则崩溃)。
编辑
try catch 异常,然后查看 logcat 找出罪魁祸首:
try {
Cursor cursor = mDb.query(....);
if( cursor.moveToFirst() ) {
.....
}
} catch ( Exception e ) {
e.printStackTrace();
}
关于java - 如果数据库中没有值,db.query() 会使应用程序崩溃吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15928513/