Sqlite查询(如)不工作显示任何内容

时间:2014-07-13 08:08:57

标签: android sqlite

这里我试图过滤Sqlite数据库但这个查询不起作用。它什么也没显示。请帮我弄清楚我做错了什么? 谢谢!

public ArrayList<Listcollection> listafterfilter(String s) {
    SQLiteDatabase db = this.getReadableDatabase();
    ArrayList<Listcollection> results = new ArrayList<Listcollection>();
    Cursor crs =  null;


    while (crs.moveToNext()) {

        if(s == null || s.length() ==0){
            crs = db.query(CONTACTS_TABLE_NAME, new String[]{C_NAME, C_PHONE , C_TYPE    ,C_ADDRESS ,C_DATE,C_PNAME,C_CDATE , C_MNO ,C_DNAME ,C_DPHONE ,
                C_TSCHARGE ,C_DAMOUNT ,C_FANDSOL, C_TRNO, C_TCRAMOUNT }, null, null, null,null, null);
            Listcollection item = new Listcollection();
            item.setId(crs.getInt(crs.getColumnIndex(CONTACTS_COLUMN_ID)));
            item.setName(crs.getString(crs.getColumnIndex(C_NAME)));
            item.setCdate(crs.getString(crs.getColumnIndex(C_CDATE)));
           item.setType(crs.getString(crs.getColumnIndex(C_TYPE)));
            results.add(item);

        }

        else {
            crs = db.query(true,CONTACTS_TABLE_NAME, new String[]{C_NAME, C_PHONE , C_TYPE ,C_ADDRESS ,C_DATE,C_PNAME,C_CDATE , C_MNO ,C_DNAME ,C_DPHONE ,
                    C_TSCHARGE ,C_DAMOUNT ,C_FANDSOL, C_TRNO, C_TCRAMOUNT }, " like '%"+s+"%'",null, null,null, null, null);

            Listcollection item = new Listcollection();
            item.setId(crs.getInt(crs.getColumnIndex(CONTACTS_COLUMN_ID)));
            item.setName(crs.getString(crs.getColumnIndex(C_NAME)));
            item.setCdate(crs.getString(crs.getColumnIndex(C_CDATE)));
           item.setType(crs.getString(crs.getColumnIndex(C_TYPE)));
            results.add(item);
        }

    }

    db.close();
    return results;
}

1 个答案:

答案 0 :(得分:1)

您已声明了光标

Cursor crs =  null; 

当它为空时,你试图遍历或循环光标

  while (crs.moveToNext()) 

你还有另外一个问题,即使你解决了这个问题,还有一个问题。

在循环游标时,您无法再次修改。

 crs = db.query(CONTACTS_TABLE_NAME, new String[]{C_NAME, C_PHONE , C_TYPE    ,C_ADDRESS ,C_DATE,C_PNAME,C_CDATE , C_MNO ,C_DNAME ,C_DPHONE ,
                C_TSCHARGE ,C_DAMOUNT ,C_FANDSOL, C_TRNO, C_TCRAMOUNT }, null, null, null,null, null);

您需要再声明一个游标

 Cursor crs =  null; 

 Cursor queryCrs =  null; 

   while (crs.moveToNext()) 

     queryCrs = db.query(CONTACTS_TABLE_NAME, new String[]{C_NAME, C_PHONE , C_TYPE    ,C_ADDRESS ,C_DATE,C_PNAME,C_CDATE , C_MNO ,C_DNAME ,C_DPHONE ,
                    C_TSCHARGE ,C_DAMOUNT ,C_FANDSOL, C_TRNO, C_TCRAMOUNT }, null, null, null,null, null);