query
public Cursor query(boolean distinct, String table, String[] columns,
String selection, String[] selectionArgs, String groupBy,
String having, String orderBy, String limit, CancellationSignal cancellationSignal)
//10个参数
//distinct: 设置为true,每一行的数据必须唯一。反之亦然。
//table: 操作的表名
//columns:返回的列名,如果设置为null,返回所有列
//selection:返回哪一行,相当于SQL语句中的 WHERE 关键字。传递null则会返回给定表的所有行。
//selectionArgs: 用于替换上一个参数中的 ? ,顺序对应selection中?的顺序。格式限制为String格式。
//groupBy: 用于设定返回行的分组方式,相当于SQL语句中的GROUP BY 关键字。传递null表示返回的行不会被分组。
//having: 决定哪一行被放到Cursor中的过滤器。如果使用了行分组,相当于SQL语句中的HAVING关键字。
// 传递null会导致所有的行都包含在内,前提是groupBy属性也设置为null。
//orderBy: 行的排列方式,相当于SQL语句中的“ORDER BY”关键字
//limit: 设置query语句返回行的数量,相当于SQL语句中的“LIMIT”关键字。注意格式为String.
//cancellationSignal: 取消程序操作的信号
public Cursor query(boolean distinct, String table, String[] columns,
String selection, String[] selectionArgs, String groupBy,
String having, String orderBy, String limit) //9个参数
public Cursor query(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy, String limit) //8个参数
public Cursor query(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy)//7个参数,常用
示例:
Cursor cursor = db.query("user", new String[]{"name"}, "id=?",
new String[]{"1"}, null, null, null);
rawQuery
直接使用SQL语句进行查询的:SQL语句,条件参数
public Cursor rawQuery(String sql, String[] selectionArgs,
CancellationSignal cancellationSignal)
public Cursor rawQuery(String sql, String[] selectionArgs)//常用
第一个参数字符串内的问号(占位符)会被后面的String[]数组逐一对换掉
//写法一:
String sql = "select * from user where name=?";
Cursor cursor = db.rawQuery(sql, new String[]{"许强"});
//写法二:
String sql = "select * from user where name=许强";
Cursor cursor = db.rawQuery(sql, null);
相同点:
最后调用的都是rawQueryWithFactory(CursorFactory,String,String[],String,CancellationSignal)
这个方法
不同点:
query()
帮你拼写 SQL 语句,而 rawQuery() 是你自己拼写好 SQL语句。
query
对比rawQuery
来讲就有一个好处,前者rawQuery你在写入SQL语句的时候,
有可能写错了或者写漏了什么单词拼写错误的时候他会出错,而后者相对来讲出错的机率就比较小。
moveToNext,moveToFirst区别
moveToNext()
方法可以将游标从当前行移动到下一行,如果已经移过了结果集的最后一行,返回结果为false,否则为true。
moveToPrevious()
方法(用于将游标从当前行移动到上一行,如果已经移过了结果集的第一行,返回值为false,否则为true )
moveToFirst()
方法(用于将游标移动到结果集的第一行,如果结果集为空,返回值为false,否则为true )
moveToLast()
方法(用于将游标移动到结果集的最后一行,如果结果集为空,返回值为false,否则为true ) 。
sqlite查询得到的cursor的初始位置是指向第一条记录的前一个位置的,即默认位置-1
因此查询得到cursor后第一次调用moveToFirst或moveToNext都可以将cursor移动到第一条记录上。