1.创建一个类继承SQLiteOpenHelper(若使用SQLite):
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
|
public class MySQLiteHelper extends SQLiteOpenHelper
{ //重写构造方法
public MySQLiteHelper(Context context, String name, CursorFactory factory,
int version)
{
super (context, name, factory, version);
}
//创建表
@Override
public void onCreate(SQLiteDatabase db)
{
db.execSQL( "CREATE TABLE person(personid INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20),phone VARCHAR(20))" );
}
//升级表(当Database的Version低于当前new里的Version,直接执行下面方法)
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
int v = newVersion - oldVersion;
if (v > 0 )
{
db.execSQL( "ALTER TABLE person ADD salary3 VARCHAR(20)" );
}
}
} |
2.创建自定义ContentProvider:
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
59
|
public class MyContentProvider extends ContentProvider
{ private MySQLiteHelper mDBHelper;
public MyContentProvider()
{
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs)
{
SQLiteDatabase db = mDBHelper.getWritableDatabase();
int i = db.delete( "person" , selection,selectionArgs);
return i;
}
@Override
public String getType(Uri uri)
{
throw new UnsupportedOperationException( "Not yet implemented" );
}
//创建Uri
private static final Uri URI = Uri.parse( "content://com.example.cpone" );
@Override //插入
public Uri insert(Uri uri, ContentValues values)
{
SQLiteDatabase db = mDBHelper.getWritableDatabase();
long id = db.insert( "person" , null , values);
return ContentUris.withAppendedId(URI, id); //相当于原先的Uri加上插入的行号
}
@Override
public boolean onCreate() //创建表
{
mDBHelper = new MySQLiteHelper(getContext(), "person" , null , 1 );
return false ;
}
@Override //查询
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder)
{
SQLiteDatabase db = mDBHelper.getWritableDatabase();
Cursor cursor = db.query( "person" , projection, selection, selectionArgs, null , null , sortOrder);
return cursor;
}
@Override //修改
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs)
{
SQLiteDatabase db = mDBHelper.getWritableDatabase();
int i = db.update( "person" , values, selection, selectionArgs);
return i;
}
} |
3.在另一个项目里使用自定义ContentProvider:
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
59
|
public class MyContentProvider extends ContentProvider
{ private MySQLiteHelper mDBHelper;
public MyContentProvider()
{
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs)
{
SQLiteDatabase db = mDBHelper.getWritableDatabase();
int i = db.delete( "person" , selection,selectionArgs);
return i;
}
@Override
public String getType(Uri uri)
{
throw new UnsupportedOperationException( "Not yet implemented" );
}
//创建Uri
private static final Uri URI = Uri.parse( "content://com.example.cpone" );
@Override //插入
public Uri insert(Uri uri, ContentValues values)
{
SQLiteDatabase db = mDBHelper.getWritableDatabase();
long id = db.insert( "person" , null , values);
return ContentUris.withAppendedId(URI, id); //相当于原先的Uri加上插入的行号
}
@Override
public boolean onCreate() //创建表
{
mDBHelper = new MySQLiteHelper(getContext(), "person" , null , 1 );
return false ;
}
@Override //查询
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder)
{
SQLiteDatabase db = mDBHelper.getWritableDatabase();
Cursor cursor = db.query( "person" , projection, selection, selectionArgs, null , null , sortOrder);
return cursor;
}
@Override //修改
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs)
{
SQLiteDatabase db = mDBHelper.getWritableDatabase();
int i = db.update( "person" , values, selection, selectionArgs);
return i;
}
} |
注:
1.ContentProvider仍在主线程上运行,但对他的调用是异步的,不使用消息队列。
本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1217552,如需转载请自行联系原作者