您的位置:首页 > 数据库

使用特定的方法操作SQLite数据库

2016-01-27 13:28 585 查看
一 概述

android的SQLiteDatabase提供了insert,delete,update,query语句来操作数据库

二 使用insert方法插入纪录

SQLiteDatabase的insert方法的签名为

long insert(String table,String nullColumnHack,ContentValues values)

参数介绍

table 表名

nullColumnHack 代表强行插入null值的数据列的列名。当values参数为null,或不包含任何key-value对时该参数有效

values 代表一行纪录的数据

insert方法插入一行纪录使用ContentValues存放

ContentValues相当于Map

ContentValues方法:

1存入数据: put(String key, Xxx value);(key为数据列的列名)

2取出数据: getAsXxx(String key);

ex:

ContentValues values = new ContentValues();
values.put("name","shj");
values.put("age",200);
//返回新添加记录的行号,改行号是是一个内部值,与主键id无关,发生错误返回-1
long rowid = db.insert("person",null,values);


不管第三个参数是否包含数据,执行insert方法总会添加一条记录,如果第三个参数为空,则会添加一条除主键外其他字段都为空的记录

insert()方法的底层实际依然是通过构造insert sq语句来进行插入的

//ContentValues中的key-value对的数量决定下面的key-value对
insert into<表名>(key1,key2...)
values(value1,value2...)


此时如果第三个参数为null,或其中key-value对的数量为0,由于insert()方法还是会按此方法生成一条insert语句,此时的insert()语句为

//这个sql语句显然有问题,为了满足哦sql语法的要求,insert语句必须给定一个列名,如:insert into<person>(name)values(null),这个name列名就由第二个参数来指定。由此可见,当ContentValues为null,或者key-value对数量为0时,第二个参数就会起作用了。也就是说,第二个参数就是为了这种情况存在的
insert into<表名>()
values()


第二个参数指定的列名不应该是主键的列名,不应该是非空列的列名,否则会异常

三 update方法更新记录

签名 update(String table,ContentValues values,String whereClause,String whereArgs)

参数说明

table 表名

values 更新的数据

whereClause 满足改where子句的记录将会被更新

用于为whereClause子句传入参数

方法的返回值,该方法返回受update语句影响的记录的条数

ex:更新person表中所有主键大于20的人的人名

ContentValues values = new ContentValues();
values.put("name","new name");
int count = db.update("person",values,"_id>?",new Integer[]{20});
//对应的sql语句为
update<table>
set key1 = value1,key2 = value2...
where <whereClause>


四 delete方法删除记录

签名(同update)

参数(同update)

返回值(同update)

ex:我门要删除person表中以孙开头的记录

db.delete("person","person_name like ?",new String[]{"孙_"});
//对应的sql语句
delete<表名>
where<whereClause>


五 query方法查询记录

签名:Cursor query(boolean distinct,String table,String[] columns,String whereClause,String[] selectionArgs,String groupBy,String having,String orderBy,String limit)

参数

distinct 指定是否去除重复记录

table 表名

columns 要查询出来的列名,相当于select关键字后面的内容

whereCaluse 查询条件的字句,相当于where后的部分,允许使用“?”占位符

selectionArgs 用于为whereCaluse子句中的占位符传入参数值,值在数组中的位置必须与占位符在语句中的位置一致

groupBy 分组,相当于select语句后的groupBy

having 用于对分组进行过滤,相当于。。。

orderBy 排序,personid desc,age asc,相当于。。。

limit 分页 相当于。。。

返回值 Cursor

ex 查询person表中人名以孙开头的记录

Cursor cursor = db.query("person",new String("_id","name","age"),"name like ?",new String[]{"孙%"},null,null,"personid desc","5,10");
//处理结果集
cursor.close();


疑问

什么是SQLiteDatabase?数据库

SQLiteDatabase的insert方法的签名?

nullColumnHack这个参数的用法,上面已经解释

需要总结sql语句

最后的query的第一个参数distinct不见了?query方法有很多的构造方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: