Android中SQLite以及ContentProvider自我学习、理解、失败之总结

  在《第一行代码中》数据存储和ContentProvider内容提供器是相邻的两章。花了一天两夜,终于把这两章的知识和理解理顺了。而数据存储和持久化这一章内容较繁杂和难的地方就是SQLite的相关概念和用法,特别是用法,SQLite的语句对我这种没有基础的半吊子选手真像眼前蒙了雾。

理顺之后才理解了 为什么把SQLite的知识放在前面讲,是因为后面自定义内容提供器的具体实现方法其实就是通过SQLiteDatabase的各种方法来复写原本的ContentProvider抽象类的各种方法,方法名基本都是一样的。

  不同的是在自定义内容提供器的过程中,冒出来一个uriMatcher的概念,也是比较难懂。我原本以为这么些个方法接收Uri进去不就好了吗,已经可以做出相应的操作,为什么要他妹的matcher~.搞了半天才明白,方法中怎么提取Uri的信息来操作还是要凭开发者自己一行行代码来实现,如果不用uriMatcher来匹配,代码量会变得更加庞大,这是我通过学习自己的理解。

对这两部分知识做个回顾吧~


数据存储和持久化技术

1,持久化技术提供了使数据在瞬时状态和持久状态相互转换的方法,讲了三种方式;

2,文件存储;

2.1-openFileOutput()方法存储文件,

2.2-openFileInput()方法读取文件,

基本就属于java的io流范畴,balabala,有个方法值得注意一下:TextUtils.isEmpty(String text),当传入的为null或者空字符串时,都返回true;

3,SharedPreferences存储,键值对的方式进行存储,存储格式为xml;

3.1-三种方式获取SharedPreferences对象

getSharedPreferences(name,MODE)

getPreferences(MODE)

PreferenceManager.getDefaultSharedPreferences(Context);

使用edit()方法来获得editor对象

添加数据并提交~

4,SQLite数据库:一款轻量级关系型数据库

定义类继承SQLiteOpenHelper对数据库进行创建或升级;adb shell的使用;

升级数据库(drop语句,删了再建:粗糙方式;;

在onupgrade方法中使用switch语句,对应不同版本);

增删改查;

insert(table,null,ContentValues)\\ContentValues封装具体数据,添加进数据库

delete(table,String,String【】)

update(table,values,String,String【】)

查,查是最麻烦的。query(七个参数·)

内容提供器

内容提供器是安卓中不同程序实现数据共享的一种机制。

1,

要想访问数据,必须借助ContentResolver,getContentResolver方法得到对象。ContentResolver不接受表名,只接收uri。

2,创建自己的内容提供器(我自己的误区:ContentResolve并非万事大吉,它本身并不具有共享数据操作的各种方法,只有你的应用程序创建了内容提供器才行)

需要复写的6个方法:

boolean onCreate();

Uri insert(Uri,ContentValues);

int delete(Uri ,String, String[]);

i nt update(Uri,ContentValues,String,String[]);

Cursor query(6个参数);

String getType(Uri);

使用Uri匹配器UriMatcher类,

构造:UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH)

判断:uriMatcher.addURI(权限,路径,自定义常量)

匹配:uriMatcher.match(uri)

声明:记得Manifest里面要加provider的权限声明

android:name

android:authorities

android:exported


想了一晚上的错误,关于数据库表中“”主键“”的概念,总之,前面建表语句中要和后面相应的方法参数相一致,

我的错误就是前面写的是……+“_id integer primary key autoincrement”,后面方法中却成了“id = ?”

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值