两种查询的操作
1.rawQuery
SQLiteDatabase db = ....;
Cursor cursor = db.rawQuery(“select * from person”, null);
while (cursor.moveToNext()) {
int personid = cursor.getInt(0); //获取第一列的值,第一列的索引从0开始
String name = cursor.getString(1);//获取第二列的值
int age = cursor.getInt(2);//获取第三列的值
}
cursor.close();
db.close();
rawQuery()方法的第一个参数为select语句;第二个参数为select语句中占位符参数的值,如果select语句没有使用占位符,该参数可以设置为null。带占位符参数的select语句使用例子如下:
Cursor cursor =
db.rawQuery("select * from person where name like ? and age=?",
new String[]{"%工工%", "4"});
上面的列子就是带有查询条件的sql语句
2 query()
SQLiteDatabase还专门提供了对应于添加、删除、更新、查询的操作方法: insert()、delete()、update()和query() 。这些方法实际上是给那些不太了解SQL语法的人使用的,对于熟悉SQL语法的程序员而言,直接使用execSQL()和rawQuery()方法执行SQL语句就能完成数据的添加、删除、更新、查询操作。
query()方法实际上是把select语句拆分成了若干个组成部分,然后作为方法的输入参数:
SQLiteDatabase db = databaseHelper.getWritableDatabase();
Cursor cursor = db.query("person", new String[]{"personid,name,age"}, "name like ?", new String[]{"%溧阳%"}, null, null, "personid desc", "1,2");
while (cursor.moveToNext()) {
int personid = cursor.getInt(0); //获取第一列的值,第一列的索引从0开始
String name = cursor.getString(1);//获取第二列的值
int age = cursor.getInt(2);//获取第三列的值
}
cursor.close();
db.close();
query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)方法各参数的含义:
- table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。
- columns:要查询出来的列名。相当于select语句select关键字后面的部分。
- selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”
- selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。
- groupBy:相当于select语句group by关键字后面的部分
- having:相当于select语句having关键字后面的部分
- orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc;
- limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。