android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pbm863521/article/details/78940926
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);
问题解决。

还是要在细节部位多注意啊。

猜你喜欢

转载自blog.csdn.net/pbm863521/article/details/78940926