1、使用insert方法插入记录
<span style="font-size:14px;"> long insert(String table, //代表想插入数据的表名
String nullColumnHack, //代表强行插入null值的数据列的列名。当valus参数为
//null或不包含任何key-value对时该参数有效。
ContentValues values) //代表一行记录的数据
</span>
insert方法插入的一行记录使用ContentValues存放,ContentValues
类似于Map,它提供了put(String key,Xxx value)
(其中key为数据列的列名)
方法用于存入数据、getAsXxx(String key)方法用于取出数据。
例如如下语句:
<span style="font-size:14px;">ContentValues values = new ContentValues();
values.put("name","孙悟空");
values.put("age", 500);
//返回新添记录的行号,该行号是一个内部直,
//与主键id无关,发生错误返回-1
long rowid = db.insert("person_inf", null, values);</span>
不管第三个参数是否包含数据,执行insert()方法总会添加一条记录,
如果第三个
参数为空,会添加一条除主键之外其他字段值都为null的记录.
insert()方法的底层实际上依然是通过构造insert SQL语句来进行插入的,
因此它生成的SQL语句总是如下面的语句:
ContentValue里key-value对的数量决定了下面的
key-value对 insert into <表名>(key1,key2···) values(value1,value2···)
2、使用update方法更新记录
<span style="font-size:14px;">update(String table, //代表想更新数据的表名
ContentValues values,//代表想更新的数据
String whereClause, //满足该whereClause子句的记录会被更新
String[] whereArgs); //用于为whereClause子句传入参数</span>
该方法返回受此update语句影响的记录的条数
例如我们想更新person_inf表中所有主键大于20的人的人名, 可调用如下方法:
<span style="font-size:14px;">ContentValues values = new ContentValues();
//存放更新后的人名
values.put("name", "新人名");
int result = db.update("person_inf",values,"_id > ?",new Integer[]{20});</span>
实际上update方法底层对应的SQL语句如下:
<span style="font-size:14px;">update<table>
set key1=value1,key2=value2...
where <whereCluase></span>
其中whereArgs参数用于向whereClause中传入参数
3、使用delet方法删除记录
<span style="font-size:14px;"> delete(String table, //代表想要删除的表名
String whereClause,//满足whereClause子句的记录将会被删除
String[] whereArgs)//用于为whereClause子句传入参数</span>
该方法返回受此delete语句影响的记录的条数
例如我们想删除person_inf表中所有人名以“孙”开头的记录,可调用如下方法:
<span style="font-size:14px;"> int result = db.delete("person_inf","person_name like ?",new String[]{"孙_"});
</span>
实际上delete方法底层对应的SQL语句如下:
delete<table> where <whereClause>
4、使用query方法查询记录
<span style="font-size:14px;">Cursor query(boolean distinct, //指定是否去除重复记录
String table, //执行查询数据的表名
String[] columns, //要查询出来的列名,相当于select语句select关键字后面的部分
String whereClause, //查询条件子句,相当于select语句where关键字后面的部分,
//在条件子句中允许使用占位符"?"
String[] selectionArgs,//用于为whereClause子句中占位符传入参数
//值在数组中的位置与占位符在数组中的位置必须
//一致,否则就会有异常
String groupBy, //用于控制分组。相当于select语句group by
//关键字后面的部分
String having, //用于对分组进行过滤。相对于select语句
//having关键字后面的部分
String orderBy, //用于对记录进行.相对于select语句
//order by关键字后面的部分。
String limit //limit:用于进行分页,相对于select语句
//limit关键字后面的部分。
);</span>
我忍不住想要表达对这个方法的不满,花时间理解这个方法中各个参数设置
的时间还不如去掌握这条select语句的语法格式了。
当然,这个query()方法也并非完全一无是处:当应用程序需要进行“条件不确定”
的查询(即查询条件需要动态改变的查询)时,使用这个query方法可以避免手动拼接
SQL语句。
例如想要查出person_inf表中人名以“孙”开头的记录,可使用如下语句:
Cursor cursor = db.query(
"person_inf",
new String[]{"_id,name,age"},
"name like ?",
new String[]{"孙%"},
null,
null,
"personid desc",
"5",
"10");