ContentProvider使用
2016-03-23 15:25
381 查看
平时很少用到数据库SQLite,对于ContentProvider的认识一直是一个模糊的概念;每次用到的时候就必须从网上查询资料,还是自己记录下为好!
onCreate:在此方法中调用SQLiteDatabase的方法execSQL,去创建所需要的表格;其中execSQL的参数是一条字符型的SQL语句;例如:
onUpgrade:该方法后面有两个参数,oldVersion和newVersion;需求中可能会涉及到数据库的更新操作,比如:增加一张表、为某个表增加一列等;就可以在onUpgrade中去实现:
每个ContentProvider都必须是唯一的;在配置文件中,定义contentProvider时需要配置一个authorities(权威)字段;这个字段就和contentProvider子类的authorities字段一样就可以了;具体如下:
onCreate:可以在此创建SQLiteOpenHelper实例:
其他四个CRUD操作,可以通过SQLiteOpenHelper的getWritableDatabase或者getreadableDatabase方法,获取SQLiteDatabase实例去操作数据库;
在Activity中调用contentProvider:确定contentProvider的URI;URI通常是由Uri.parse("content://" + AUTHORITY + "/images")得到; 调用getContentResolver()得到ContentResolver实例,进而调用CRUD方法进行数据库操作。
查看表的列名:pragma table_info(表名);
切换显示模式:.mode line(注意前面有个点)
查看表的创建语句:.schema 表名(注意前面有个点)
把表结构输出,同时索引也会输出:.dump 表名(注意前面有个点)
退出:.exit 或者.quit
强制退出sql语句:ctrl + z
1.创建数据库、表
SQLiteOpenHelper作为数据库创建以及版本管理的帮助类,我们在使用ContentProvider的时候经常会用到该类;SQLiteOpenHelper是可以抽象类,我们需要创建他的实例,并重载子类的构造方法以及至少重写它的两个抽象方法:public abstract void onCreate(SQLiteDatabase db); public abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion);构造方法:子类的构造方法一般提供至少1个参数context;但是为了管理、升级数据库,最好同时传递数据库版本号参数;例如:
public ImageDataBase(Context context, int version) { super(context, DATABASE_NAME, null, version); }
onCreate:在此方法中调用SQLiteDatabase的方法execSQL,去创建所需要的表格;其中execSQL的参数是一条字符型的SQL语句;例如:
private static final String CONTENT_CREATE = "CREATE TABLE " + CONTENT_TABLE + " (id INTEGER PRIMARY KEY AUTOINCREMENT, DETAIL TEXT, PUBLISHDATE INTEGER)";另外,我们也可以通过sqlite命令去查看表的创建语句:.schema 表名;
onUpgrade:该方法后面有两个参数,oldVersion和newVersion;需求中可能会涉及到数据库的更新操作,比如:增加一张表、为某个表增加一列等;就可以在onUpgrade中去实现:
@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { switch(oldVersion) { case 1: db.execSQL(CONTENT_CREATE); Log.i("wrx1048", "---onUpgrade---" + oldVersion); break; case 2: db.execSQL(CONTENT_ALTER); Log.i("wrx1048", "---onUpgrade---" + oldVersion); break; default: break; } }通过判断旧的数据库的版本号,去执行相应的SQL语句更新数据库;
2.常见的SQL语句:
创建表格:"CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (id INTEGER PRIMARY KEY AUTOINCREMENT, IMAGETITLE TEXT, IMAGEURI TEXT, IMAGEDESC TEXT)"删除表格:
"DROP TABLE IS EXISTS " + TABLE_NAME增加表格一列:
"ALTER TABLE TABLE_NAME ADD AGE INTEGER"
3.创建ContentProvider
ContentProvider作为Android四大组件之一,他的作用主要就是为多进程分享数据,例如联系人数据库;如果应用程序的数据不需要被其他应用分享,那么使用SQLiteDatabase就可以了。每个ContentProvider都必须是唯一的;在配置文件中,定义contentProvider时需要配置一个authorities(权威)字段;这个字段就和contentProvider子类的authorities字段一样就可以了;具体如下:
private static final String AUTHORITY = "con.wrx.content"; private static final Uri CONTENT_UTI = Uri.parse("content://" + AUTHORITY + "/images"); private static final int IMAGES = 1; private static final int IMAGE_ID = 2; private static final UriMatcher uriMatcher = getMatcher(); private static UriMatcher getMatcher() { UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI(AUTHORITY, "images", IMAGES); uriMatcher.addURI(AUTHORITY, "images/#", IMAGE_ID); return uriMatcher; } @Override public String getType(Uri uri) { switch (uriMatcher.match(uri)) { case IMAGES: return "vnd.android.cursor.dir/vnd.wrx.images"; case IMAGE_ID: return "vnd.android.cursor.item/vnd.wrx.images"; } return ""; }定义ContentProvider必须重写以下几个方法:
onCreate:可以在此创建SQLiteOpenHelper实例:
@Override public boolean onCreate() { Context context = getContext(); imageDataBase = new ImageDataBase(context, 3); return true; }getType:判断某个URI类型,是单条数据还是多条,通常配置UriMatcher一起使用。
其他四个CRUD操作,可以通过SQLiteOpenHelper的getWritableDatabase或者getreadableDatabase方法,获取SQLiteDatabase实例去操作数据库;
在Activity中调用contentProvider:确定contentProvider的URI;URI通常是由Uri.parse("content://" + AUTHORITY + "/images")得到; 调用getContentResolver()得到ContentResolver实例,进而调用CRUD方法进行数据库操作。
3.常见的sqlite3命令:
查看数据库有哪些表:.table(注意前面有个点)查看表的列名:pragma table_info(表名);
切换显示模式:.mode line(注意前面有个点)
查看表的创建语句:.schema 表名(注意前面有个点)
把表结构输出,同时索引也会输出:.dump 表名(注意前面有个点)
退出:.exit 或者.quit
强制退出sql语句:ctrl + z
4.sqlite支持的数据类型
以后再写,改bug去了...相关文章推荐
- PHP框架相关
- <PHP>字符串处理代码
- php判断每天两个时间内
- java学习php(三)增删改查+json
- PHP学习-链接数据库
- PHP判断手机号码是否合法
- PHP和JS实现多按钮提交表单
- 解决PHP开启gd库无效的问题
- php 支持递归函数.递归函数就是调用函数本身.
- PHP之预防sql注入
- PHP开发laravel框架的.env文件配置
- 根据用户身份证获取信息(php)
- php文件上传最简单的上传代码示例
- 【PHP内核】语法:不同类型之间数值运算的实现
- Magento 用了 php 中 ArrayAccess,IteratorAggregate,Countable
- php异常处理笔记
- PHP检测用户名是否存在
- php-fpm配置优化
- (备忘)php中json格式的空对象
- PHP Switch 语句