android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
在查数据库的时候出现上述异常
查看sql语句:
//获取所选图片的faceFeature
helper=LocalImageHelper.getInstance();
LocalFile localFile = helper.getOneFaceFeature(selectFaceCountId);
selectFaceFeatureStr = localFile.getFaceFeature();//获取faceFeature的字符串类型
//根据faceCountId获取某张图片的feature
public LocalFile getOneFaceFeature(String faceCountId) {
LocalFile localFile = null;
Cursor cursor = db.rawQuery("select id," + FACE_FEATURE + " from " + TAB_FACE_FEATURE + " where " + FACE_COUNT_ID + " =' " + faceCountId+" ' ", null);
if (cursor != null && cursor.moveToFirst() && cursor.getCount() > 0) {
localFile = new LocalFile();
localFile.setFaceFeature(cursor.getString(cursor.getColumnIndex(FACE_FEATURE)));
localFile.setId(cursor.getInt(cursor.getColumnIndex("id")));
}
Log.e("getOneF,cursor",cursor.toString());
Log.e("getOneFaceFeature","cursor.getCount()="+cursor.getCount());
Log.e("getOneFaceFeature",cursor.getString(cursor.getColumnIndex(FACE_FEATURE)));
cursor.close();
return localFile;
}
刚开始报的是NullPointException空指针异常,异常位置是selectFaceFeatureStr = localFile.getFaceFeature()那就是从数据库查询的是空数据。就在getOneFaceFeature中打了log,重新运行,然后报了android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0异常。这是说cursor是空,在数据库表中没有查到对应的值,那就说明表为空,或者表中没有值。不过通过Navicat查看数据库中表的值,是存在该值的。排除这种情况。
值存在,cursor又为空,看SQL语句也没什么问题,cursor怎么为空呢?查资料都说在查询之前需要写cursor != null && cursor.moveToFirst() && cursor.getCount() > 0判断,这里也写了啊。很奇怪,想不到哪里的问题。
后来又仔细看了SQL语句,发现查询条件多了个空格
" where " + FACE_COUNT_ID + " =' " + faceCountId+" ' "
问题找到了,是SQL查询条件写错了,多了个空格,当然查不到了。把空格删掉:
Cursor cursor = db.rawQuery("select id," + FACE_FEATURE + " from " + TAB_FACE_FEATURE + " where " + FACE_COUNT_ID + " = '" + faceCountId+"' ", null);
问题解决。
还是要在细节部位多注意啊。