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

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);
问题解决。

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

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值