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

前端之家收集整理的这篇文章主要介绍了使用特定的方法操作SQLite数据库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一 概述
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[] 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方法有很多的构造方法

猜你在找的Sqlite相关文章