一 概述
android的sqliteDatabase提供了insert,delete,update,query语句来操作数据库
二 使用insert方法插入纪录
- sqliteDatabase的insert方法的签名为
long insert(String table,String nullColumnHack,ContentValues values) 参数介绍
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...)
//这个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子句传入参数
- 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>
- 签名(同update)
- 参数(同update)
- 返回值(同update)
- ex:我门要删除person表中以孙开头的记录
db.delete("person","person_name like ?",new String[]{"孙_"});
//对应的sql语句
delete<表名>
where<whereClause>
- 签名:Cursor query(boolean distinct,String table,String[] columns,String[] selectionArgs,String groupBy,String having,String orderBy,String 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();
疑问