Android
提供了一个名为
sqliteDatabase
的类,该类封装了一些操作数据库的
API
,使用该类可以完成对数据进
行添加
(Create)
、查询
(Retrieve)
、更新
(Update)
和删除
(Delete)
操作(这些操作简称为
CRUD
)。对
sqliteDatabase
的学习,我们应该重点掌握
execsql()
和
rawQuery()
方法。
execsql()
方法可以执行
insert
、
delete
、
update
和
CREATE TABLE
之类有更改行为的
sql
语句;
rawQuery()
方法可以执行
select
语
句。
sqliteDatabase db = ....;
db.close();
执行上面
sql
语句会往
person
表中添加进一条记录,在实际应用中,
语句中的
“我的博客
”
这些参数值应该由用户
输入界面提供,如果把用户输入的内容原样组拼到上面的
insert
语句,
当用户输入的内容含有单引号时,组
拼出来的
sql
语句就会存在语法错误。要解决这个问题需要对单引号进行转义,也就是把单引号转换成两个
单引号。有些时候用户往往还会输入像
“
&
”
这些特殊
sql
符号,为保证组拼好的
sql
语句语法正确,必须对
sql
语句中的这些特殊
sql
符号都进行转义,显然,对每条
sql
语句都做这样的处理工作是比较烦琐的。
sqliteDatabase
类提供了一个重载后的
execsql(String sql,Object[] bindArgs)
方法,使用这个方法可以解
决前面提到的问题,因为这个方法支持使用占位符参数
(?)
。使用例子如下:
sqliteDatabase db = ....;
db.close();
Cursor cursor = db.rawQuery(“select * from person”,null);
while (cursor.moveToNext()) {
}
cursor.close();
db.close();
rawQuery()
方法的第一个参数为
select
语句;第二个参数为
select
语句中占位符参数的值,如果
select
语句没有使
用占位符,该参数可以设置为
null
。带占位符参数的
select
语句使用例子如下:
Cursor cursor = db.rawQuery("select * from person where name like ? and age=?",new String[]{"%javaeye
%","4"});
Cursor
是结果集游标,用于对结果集进行随机访问,如果大家熟悉
jdbc
,
其实
Cursor
与
JDBC
中的
ResultSet
作用
很相似。使用
moveToNext()
方法可以将游标从当前行移动到下一行,如果已经移过了结果集的最后一行,返
回结果为
false
,否则为
true
。另外
Cursor
还有常用的
moveToPrevIoUs()
方法(用于将游标从当前行移动到上
一行,如果已经移过了结果集的第一行,返回值为
false
,否则为
true
)、
moveToFirst()
方法(用于将游标移
动到结果集的第一行,如果结果集为空,返回值为
false
,否则为
true
)和
moveToLast()
方法(用于将游标移
动到结果集的最后一行,如果结果集为空,返回值为
false
,否则为
true
)
。