sqlite模糊查询与分页

来源:互联网 发布:js刷新form表单 编辑:程序博客网 时间:2024/05/22 08:30
sqlite模糊查询与分页

/**
*
*
@param
queryWords 要查询的关键词(中英文都可以)
*
@param
curItem 当前查询到的item 所在位置
*
@param
sizeRequest 每次请求查询的数据行数
    *
@return  返回值是一个List,里面保存的是一条条记录
    */

publicList<Glossary> findDBManagerWords(String queryWords ,intcurItem,intsizeRequest) {
        SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(
                        DBManager.
DB_PATH+"/"+ DBManager.DB_NAME,null);// 获取导入的数据库操作对象

        
SQLiteDatabase db = database;
        
// //如果只对数据进行读取,建议使用此方法
        
dbGlossary=newArrayList<Glossary>();
        
if(dbGlossary!=null) {
                
dbGlossary.clear();// 如果列表里有数据,重新加载前应清空
        
}

        // 查询glossary这张数据表
        Cursor cursor = db.rawQuery(
                        
"select * from glossary where glo_EN_Name like ? or glo_CN_Name like ? or glo_description like ? limit ?,?",newString[] { "%"
                                  
+ queryWords +"%","%"+ queryWords +"%","%"+queryWords + "%",String.valueOf(curItem),String.valueOf(sizeRequest)});
        
     //select查询返回的是一个cursor,通过对cursor 进行循环,可以解析出每一个字段
        while(cursor.moveToNext()) {

                String str_glo_CN_Name = cursor.getString(cursor.getColumnIndex(
"glo_CN_Name"));
                String str_glo_EN_Name = cursor.getString(cursor.getColumnIndex("glo_EN_Name"));
                String str_glo_description = cursor.getString(cursor.getColumnIndex("glo_description"));

                 //将一条记录里的每一个字段保存到glossary这个对象中,该对象可能还有其他属性,没有赋值的话就是默认值
                Glossary glossary =newGlossary();
                glossary.setGloCnName(str_glo_CN_Name);
                glossary.setGloEnName(str_glo_EN_Name);
                glossary.setGloDescription(str_glo_description);
                 
                //将对象保存添加进List中
                dbGlossary.add(glossary);
        }

        cursor.close();
        
// db.close();
        
if(db.isOpen()) {
                db.close();
        }
        //返回List
        returndbGlossary;

}

以上的findDBManagerWords()函数中,最重要的是下面这句话:
Cursor cursor = db.rawQuery(
                        
"select * from glossary where glo_EN_Name like ? or glo_CN_Name like ? or glo_description like ? limit ?,?",newString[] { "%"
+ queryWords +"%","%"+ queryWords +"%","%"+queryWords +"%",String.valueOf(curItem),String.valueOf(sizeRequest)});

rawQuery()的定义形式如下
public Cursor rawQuery (String sql, String[] selectionArgs)
sql :the SQL query. The SQL string must not be ; terminated
selectionArgs : You may include ?s in where clause in the query, which will be replaced by the values from selectionArgs. The values will be bound as Strings.

该函数第一个字段 sql 是我们用来查询时使用的 SQL语句,要注意的是,用select 语句时,会涉及到查询条件,条件里的参数我们都用问号(?)来代替,
具体问号里面是哪个关键词,要放在函数的第二个参数selectionArgs当中~~
selectionArgs是一个字符串数组,数组里的每个元素都是字符串(如果查询条件中某个参数是int类型的,可以用String.valueOf(sizeRequest) 方式来转换)

上面语句还涉及到select的模糊查询,
将会对glo_EN_Name,glo_CN_Name,glo_description这几个字段进行模糊查询,
"%" + queryWords +"%" 的意思是,只要字段中包含queryWords这个关键字,那么就会被检索出来,
前后的两个百分号代表关键字之前或之后可以有任意多个字符
0 0