sqlite之query、rawQuery区别;moveToNext,moveToFirst区别

5 篇文章 0 订阅
4 篇文章 0 订阅

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移动到第一条记录上。

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值