我是靠谱客的博主 小巧柜子,这篇文章主要介绍自定义数据库 -- ContentProvider和ContentResolver,现在分享给大家,希望可以做个参考。

在android中自己通过ContentProvider创建一个上述数据表。

1. 首先通过SQLiteOpenHelper执行SQL语句,创建数据表。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
private static final String DATABASE_NAME = "simrecord.db"; private static final int DATABASE_VERSION = 1; <p> private static final String SIMCARD_TABLE_CREATE = "CREATE TABLE " + TABLE_NAME + //“CREATE TABLE ”后面需要加一个空格 "(_id INTEGER primary key," + " card_id VARCHAR," + "date VARCHAR," + "sim_state VARCHAR," + "sim_operator VARCHAR," + "sim_country VARCHAR," + "data_state VARCHAR," + "network_type VARCHAR)"; </p>
复制代码
1
 
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<pre class="java" name="code">private class MyDataBaseHelper extends SQLiteOpenHelper{ //by SQLiteOpenHelper to make SQLiteDatabase public MyDataBaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub Log.d(TAG,"MyDataBaseHelper onCreate()"); db.execSQL(SIMCARD_TABLE_CREATE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub Log.d(TAG,"MyDataBaseHelper onUpgrade()"); } }

复制代码
1

 

2.然后通过继承ContentProvider类

其中onCreate()方法,通过SQLiteOpenHelper类的getWritableDatabase()方法获取数据库SQLiteDatabase类mDb,然后通过mDb对数据库进行各项操作。
覆写其中查询/删除/插入/增加方法,通过mDb对数据表进行相应的操作。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public class SimRecordProvider extends ContentProvider { private static final String TAG ="simrecord: SimRecordProvider"; private static final String PROVIDER_NAME ="com.sec.provider.simrecord"; private static final String TABLE_NAME = "simrecord"; private MyDataBaseHelper mDataBaseHelper; private SQLiteDatabase mDb; @Override public boolean onCreate() { // TODO Auto-generated method stub Log.d(TAG," onCreate()"); mDataBaseHelper =new MyDataBaseHelper(getContext()); mDb = mDataBaseHelper.getWritableDatabase(); return true; } @Override public int delete(Uri uri, String selection, String[] selectionArgs) { // TODO Auto-generated method stub Log.d(TAG," delete()"); //Log.d(TAG," delete() where : " +selection); mDb.delete(TABLE_NAME, selection, null); return 0; } @Override public String getType(Uri uri) { // TODO Auto-generated method stub Log.d(TAG," getType()"); return null; } @Override public Uri insert(Uri uri, ContentValues values) { // TODO Auto-generated method stub Log.d(TAG," insert()"); //Log.d(TAG," insert() values : " +values); mDb.insert(TABLE_NAME, null, values); return null; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] seletionArgs, String sortOrder) { // TODO Auto-generated method stub Log.d(TAG," query()"); //Log.d(TAG," query() where : " +selection); //String where = "card_id=?"; Cursor mCursor =null; mCursor = mDb.query(TABLE_NAME, null, selection, seletionArgs, null, null, null); return mCursor; } @Override public int update(Uri uri, ContentValues values, String selection, String[] seletionArgs) { // TODO Auto-generated method stub Log.d(TAG," update()"); //Log.d(TAG," update() where : " +selection); mDb.update(TABLE_NAME, values, selection, seletionArgs); return 0; } }


3.在AndroidManifest.xml文件中添加SimRecordProvider.java的authorities, 这样子ContentResolver才可以通过URI查找到该数据库

复制代码
1
2
3
4
5
6
7
<provider android:name=".SimRecordProvider" android:authorities="com.sec.provider.simrecord" android:exported="true"> </provider>


4.ContentResolver类其实就是提供给用户进行操作数据库的接口。

通过context.getContentResolver() 获取ContentResolver,ContentResolver类中的方法:query()/delete()/insert()/update()分别对应着ContentProvider类中的相应方法。

CONTENT_URI相当于ContentProvider类中的地址,ContentResolver通过CONTENT_URI查找到对应的ContentProvider。

 

复制代码
1
2
private static final String CONTENT_URI ="content://com.sec.provider.simrecord"; mContentResolver = context.getContentResolver();


查询数据表中有多少条数据:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
public int queryCount (){ //Log.d(TAG," queryCount()****************Begin"); Cursor mCursor = mContentResolver.query(Uri.parse(CONTENT_URI), null, null, null, null); if(mCursor==null){ return 0; } //Log.d(TAG," queryCount() mCursor = " + mCursor); Log.d(TAG," queryCount() mCursor.getCount() = " + mCursor.getCount()); int count = mCursor.getCount(); return count; }

 

插入新的卡数据:通过ContentValues类封装需要保存的数据。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
public void insertCard(String card_id, ContentValues values){ //Log.d(TAG," insertCard()****************Begin"); //Log.d(TAG," insertCard() card_id = " + card_id); if(!isNewCard(card_id)){ Toast.makeText(mContext, "the card_id is alread exsit", Toast.LENGTH_SHORT).show(); Log.d(TAG," insertCard()**the card_id is alread exsit"); return ; } mContentResolver.insert(Uri.parse(CONTENT_URI), values); Log.d(TAG," insertCard()** the card inserted in database"); Toast.makeText(mContext, "insert card_id="+card_id, Toast.LENGTH_SHORT).show(); }



删除指定card_id的卡数据:

 

复制代码
1
2
3
4
5
6
7
8
public void deleteCard(String card_id){ if(card_id != null){ String where = "card_id='"+card_id+"'"; // where = '123456' Log.d(TAG," deleteCard() where= "+where ); mContentResolver.delete(Uri.parse(CONTENT_URI), where, null); } }


 

 

 

最后

以上就是小巧柜子最近收集整理的关于自定义数据库 -- ContentProvider和ContentResolver的全部内容,更多相关自定义数据库内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部