android 玩转ContentProvider之一实现ContentProvider操作数据库文档格式.docx
《android 玩转ContentProvider之一实现ContentProvider操作数据库文档格式.docx》由会员分享,可在线阅读,更多相关《android 玩转ContentProvider之一实现ContentProvider操作数据库文档格式.docx(23页珍藏版)》请在冰点文库上搜索。
16.
int
DATABASE_VERSION
1;
17.
18.
public
DatabaseHelper(Context
context)
19.
super(context,
DATABASE_NAME,
null,
DATABASE_VERSION);
20.
}
21.
22.
@Override
23.
void
onCreate(SQLiteDatabase
db)
24.
db.execSQL("
CREATE
TABLE
+
Provider.PersonColumns.TABLE_NAME
("
25.
Provider.PersonColumns._ID
INTEGER
PRIMARY
KEY,"
26.
Provider.PersonColumns.NAME
TEXT,"
27.
Provider.PersonColumns.AGE
INTEGER"
28.
);
29.
30.
31.
32.
onUpgrade(SQLiteDatabase
db,
oldVersion,
newVersion)
33.
DROP
IF
EXISTS
Provider.PersonColumns.TABLE_NAME);
34.
onCreate(db);
35.
36.}
packagecom.jacp.database;
importandroid.content.Context;
importandroid.database.sqlite.SQLiteDatabase;
importandroid.database.sqlite.SQLiteOpenHelper;
importcom.jacp.demo.provider.Provider;
/**
*操作数据库
*@authorjacp
*
*/
publicclassDatabaseHelperextendsSQLiteOpenHelper{
privatestaticfinalStringDATABASE_NAME="
privatestaticfinalintDATABASE_VERSION=1;
publicDatabaseHelper(Contextcontext){
super(context,DATABASE_NAME,null,DATABASE_VERSION);
}
@Override
publicvoidonCreate(SQLiteDatabasedb){
db.execSQL("
CREATETABLE"
+Provider.PersonColumns.TABLE_NAME+"
("
+Provider.PersonColumns._ID+"
INTEGERPRIMARYKEY,"
+Provider.PersonColumns.NAME+"
TEXT,"
+Provider.PersonColumns.AGE+"
INTEGER"
+"
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
DROPTABLEIFEXISTS"
+Provider.PersonColumns.TABLE_NAME);
onCreate(db);
}
保存跟数据库及表有关的常量:
Provider.java
com.jacp.demo.provider;
.Uri;
android.provider.BaseColumns;
5.
6./**
7.
存放跟数据库有关的常量
9.
11.public
Provider
//
这个是每个Provider的标识,在Manifest中使用
14.
AUTHORITY
com.jacp.provider.demo.person"
CONTENT_TYPE
vnd.android.cursor.dir/vnd.jacp.demo"
CONTENT_ITEM_TYPE
vnd.android.cursor.item/vnd.jacp.demo"
/**
跟Person表相关的常量
PersonColumns
implements
BaseColumns
CONTENT_URI跟数据库的表关联,最后根据CONTENT_URI来查询对应的表
Uri
CONTENT_URI
Uri.parse("
content:
//"
+"
/persons"
TABLE_NAME
person"
DEFAULT_SORT_ORDER
age
desc"
NAME
name"
AGE
age"
packagecom.jacp.demo.provider;
import.Uri;
importandroid.provider.BaseColumns;
*存放跟数据库有关的常量
publicclassProvider{
//这个是每个Provider的标识,在Manifest中使用
publicstaticfinalStringAUTHORITY="
publicstaticfinalStringCONTENT_TYPE="
publicstaticfinalStringCONTENT_ITEM_TYPE="
/**
*跟Person表相关的常量
publicstaticfinalclassPersonColumnsimplementsBaseColumns{
//CONTENT_URI跟数据库的表关联,最后根据CONTENT_URI来查询对应的表
publicstaticfinalUriCONTENT_URI=Uri.parse("
+AUTHORITY+"
publicstaticfinalStringTABLE_NAME="
publicstaticfinalStringDEFAULT_SORT_ORDER="
agedesc"
publicstaticfinalStringNAME="
publicstaticfinalStringAGE="
对数据增删改查操作的类:
PersonProvider.java
java.util.HashMap;
4.
android.content.ContentProvider;
6.import
android.content.ContentUris;
android.content.ContentValues;
8.import
android.content.UriMatcher;
9.import
android.database.Cursor;
10.import
android.database.SQLException;
11.import
12.import
android.database.sqlite.SQLiteQueryBuilder;
13.import
14.import
android.text.TextUtils;
16.import
com.jacp.database.DatabaseHelper;
18./**
操作数据库Person表的ContentProvider
23.public
PersonProvider
ContentProvider
HashMap<
String,
String>
sPersonsProjectionMap;
PERSONS
PERSONS_ID
2;
UriMatcher
sUriMatcher;
mOpenHelper;
boolean
onCreate()
36.
mOpenHelper
new
DatabaseHelper(getContext());
37.
return
true;
38.
39.
40.
41.
Cursor
query(Uri
uri,
String[]
projection,
selection,
selectionArgs,
42.
sortOrder)
43.
SQLiteQueryBuilder
qb
SQLiteQueryBuilder();
44.
qb.setTables(Provider.PersonColumns.TABLE_NAME);
45.
46.
switch
(sUriMatcher.match(uri))
47.
case
PERSONS:
48.
qb.setProjectionMap(sPersonsProjectionMap);
49.
break;
50.
51.
PERSONS_ID:
52.
53.
qb.appendWhere(Provider.PersonColumns._ID
="
uri.getPathSegments().get
(1));
54.
55.
56.
default:
57.
throw
IllegalArgumentException("
Unknown
URI
uri);
58.
59.
60.
If
no
sort
order
is
specified
use
the
default
61.
orderBy;
62.
if
(TextUtils.isEmpty(sortOrder))
63.
orderBy
Provider.PersonColumns.DEFAULT_SORT_ORDER;
64.
else
65.
sortOrder;
66.
67.
68.
Get
database
and
run
query
69.
SQLiteDatabase
db
mOpenHelper.getReadableDatabase();
70.
c
qb.query(db,
orderBy);
71.
72.
Tell
cursor
what
uri
to
watch,
so
it
knows
when
its
source
data
changes
73.
c.setNotificationUri(getContext().getContentResolver(),
74.
c;
75.
76.
77.
78.
getType(Uri
uri)
79.
80.
81.
Provider.CONTENT_TYPE;
82.
83.
Provider.CONTENT_ITEM_TYPE;
84.
85.
86.
87.
88.
89.
90.
insert(Uri
ContentValues
initialValues)
91.
Validate
requested
uri
92.
(sUriMatcher.match(uri)
!
PERSONS)
93.
94.
95.
96.
values;
97.
(initialValues
null)
98.
values
ContentValues(initialValues);
99.
100.
ContentValues();
101.
102.
103.
Make
sure
that
fields
are
all
set
104.
(values.containsKey(Provider.PersonColumns.NAME)
==
false)
105.
values.put(Provider.PersonColumns.NAME,
106.
107.
108.
(values.containsKey(Provider.PersonColumns.AGE)
109.
values.put(Provider.PersonColumns.AGE,
0);
110.
111.
112.
mOpenHelper.getWritableDatabase();
113.
long
rowId
db.insert(Provider.PersonColumns.TABLE_NAME,
Provider.PersonColumns.NAME,
values);
114.
(rowId
>
0)
115.
noteUri
ContentUris.withAppendedId(Provider.PersonColumns.CONTENT_URI,
rowId);
116.
getContext().getContentResolver().notifyChange(noteUri,
null);
117.
noteUri;
118.
119.
120.
SQLException("
Failed
insert
row
into
121.
122.
123.
124.
delete(Uri
where,
whereArgs)
125.
126.
count;
127.
128.
129.
count
db.delete(Provider.PersonColumns.TABLE_NAME,
whereArgs);
130.
131.
132.