/**
*
* @param queryWords 要查询的关键词(中英文都可以)
* @param curItem 当前查询到的item 所在位置
* @param sizeRequest 每次请求查询的数据行数
* @return返回值是一个List,里面保存的是一条条记录
*
* @param queryWords 要查询的关键词(中英文都可以)
* @param curItem 当前查询到的item 所在位置
* @param sizeRequest 每次请求查询的数据行数
* @return返回值是一个List,里面保存的是一条条记录
*/
public
List<Glossary> findDBManagerWords(String queryWords,
int
curItem,
int
sizeRequest) {
sqliteDatabase database = sqliteDatabase.openOrCreateDatabase(DBManager. DB_PATH + "/" + DBManager. DB_NAME , null ); // 获取导入的数据库操作对象
sqliteDatabase db = database;
// //如果只对数据进行读取,建议使用此方法
dbGlossary = new ArrayList<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 ?,?" , new String[] { "%"
+ 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 =
new
Glossary();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
return
dbGlossary
;
}
以上的findDBManagerWords()函数中,最重要的是下面这句话:
Cursor cursor = db.rawQuery(
"select * from glossary where glo_EN_Name like ? or glo_CN_Name like ? or glo_description like ? limit ?,?",new String[] { "%" + queryWords + "%" , "%" + queryWords + "%" , "%" +queryWords + "%" ,String.valueOf(curItem),String.valueOf(sizeRequest)});
"select * from glossary where glo_EN_Name like ? or glo_CN_Name like ? or glo_description like ? limit ?,?",new String[] { "%" + queryWords + "%" , "%" + queryWords + "%" , "%" +queryWords + "%" ,String.valueOf(curItem),String.valueOf(sizeRequest)});
rawQuery()的定义形式如下
public Cursor rawQuery (String sql,String[] selectionArgs)
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.
具体问号里面是哪个关键词,要放在函数的第二个参数selectionArgs当中~~
selectionArgs是一个字符串数组,数组里的每个元素都是字符串(如果查询条件中某个参数是int类型的,可以用String.valueOf(sizeRequest)方式来转换)
上面语句还涉及到select的模糊查询,
将会对glo_EN_Name,glo_CN_Name,glo_description这几个字段进行模糊查询,
"%"+ queryWords +"%" 的意思是,只要字段中包含queryWords这个关键字,那么就会被检索出来,
前后的两个百分号代表关键字之前或之后可以有任意多个字符