首先新建安卓项目 lession_dbs项目
请参考 前一篇文章 《Android中对数据库进行CRUD操作 》中的 Person 类 和
创建DBSQLiteOpenHelper类 并让它继承 SQLiteOpenHelper 建立数据库文件
实现其接口PersonDao中的方法 PersonDaoImpl 类
public class PersonDaoImpl implements PersonDao {
// 创建数据库对象
private DBSQLiteOpenHelper dbsqLiteOpenHelper;
public PersonDaoImpl(Context context) {
super();
dbsqLiteOpenHelper = new DBSQLiteOpenHelper(context);
}
@Override
public long insert(ContentValues values) {
long l =0;
SQLiteDatabase db = dbsqLiteOpenHelper.getWritableDatabase();
if (db.isOpen()) {
// 执行插入操作
l = db.insert("person", null, values);
db.close();
}
return l;
}
@Override
public int update(ContentValues values,String where,String selectionArgs[]) {
SQLiteDatabase db = dbsqLiteOpenHelper.getWritableDatabase();
int l =0;
if (db.isOpen()) {
// 执行插入操作
l = db.update("person", values, where,selectionArgs);
db.close();
}
return l;
}
@Override
public int delete(String where,String selectionArgs[]) {
SQLiteDatabase db = dbsqLiteOpenHelper.getWritableDatabase();
int l=0;
if (db.isOpen()) {
// 执行插入操作
l = db.delete("person", where, selectionArgs);
db.close();
}
return l;
}
@Override
public List<Person> findAll() {
SQLiteDatabase db = dbsqLiteOpenHelper.getReadableDatabase();
List<Person> persons = new ArrayList<Person>();
if (db.isOpen()) {
// 执行查询
Cursor cursor = db.query("person", new String[] { "id", "name",
"phone" }, null, null, null, null, null);
while (cursor.moveToNext()) {
// 创建person对象
Person person = new Person();
// 设置person的属性
person.setId(cursor.getInt(cursor.getColumnIndex("id")));
person.setName(cursor.getString(cursor.getColumnIndex("name")));
person.setPhone(cursor.getString(cursor.getColumnIndex("phone")));
// 添加到集合众
persons.add(person);
}
}
return persons;
}
@Override
public List<Person> findByName(String[] selectionArgs) {
SQLiteDatabase db = dbsqLiteOpenHelper.getReadableDatabase();
List<Person> persons = new ArrayList<Person>();
if (db.isOpen()) {
// 执行查询
Cursor cursor = db.query("person", new String[] { "id", "name",
"phone" }, "name like ?", selectionArgs, null, null,
"id desc");
while (cursor.moveToNext()) {
// 创建person对象
Person person = new Person();
// 设置person的属性
person.setId(cursor.getInt(cursor.getColumnIndex("id")));
person.setName(cursor.getString(cursor.getColumnIndex("name")));
person.setPhone(cursor.getString(cursor.getColumnIndex("phone")));
// 添加到集合众
persons.add(person);
}
}
return persons;
}
@Override
public List<Person> getNowPageInfo(String[] selectionArgs, String order,
String limit) {
SQLiteDatabase db = dbsqLiteOpenHelper.getReadableDatabase();
List<Person> persons = new ArrayList<Person>();
if (db.isOpen()) {
// 执行查询
Cursor cursor = db.query("person", new String[] { "id", "name",
"phone" }, "name like ?", selectionArgs, null, null, order,
limit);
while (cursor.moveToNext()) {
// 创建person对象
Person person = new Person();
// 设置person的属性
person.setId(cursor.getInt(cursor.getColumnIndex("id")));
person.setName(cursor.getString(cursor.getColumnIndex("name")));
person.setPhone(cursor.getString(cursor.getColumnIndex("phone")));
// 添加到集合众
persons.add(person);
}
}
return persons;
}
@Override
public Cursor findAlls() {
SQLiteDatabase db = dbsqLiteOpenHelper.getReadableDatabase();
if (db.isOpen()) {
// 执行查询
Cursor c = db.rawQuery("select id as _id,name,phone from person",
null);
return c;
}
return null;
}
@Override
public Cursor findById(Integer id) {
SQLiteDatabase db = dbsqLiteOpenHelper.getReadableDatabase();
if (db.isOpen()) {
// 执行查询
Cursor c = db.rawQuery("select id,name,phone from person where id=?",new String[]{id+""});
return c;
}
return null;
}
@Override
public Cursor findByNames(String name) {
SQLiteDatabase db = dbsqLiteOpenHelper.getReadableDatabase();
if (db.isOpen()) {
// 执行查询
Cursor c = db.rawQuery("select id,name,phone from person where name like ?",new String[]{name});
return c;
}
return null;
}
}
//-------------------------------------------------------------------
//-------------------新建测试类 --------------记得添加权限 ,参考 前一篇文章 --------------------------------------------------------------------------
public class DBPersonTest extends AndroidTestCase {
private static final String TAG = "DBPersonTest";
// 创建Dao对象
// PersonDao personDao = new PersonDaoImpl();
public void createDB() {
DBSQLiteOpenHelper helper = new DBSQLiteOpenHelper(getContext());
SQLiteDatabase db = helper.getWritableDatabase();
}
public void insert() {
PersonDao personDao = new PersonDaoImpl(getContext());
for (int i = 1; i < 200; i++) {
// 参数
ContentValues values = new ContentValues();
// 创建person实体对象
Person person = new Person(null, "chrp" + i, "150319855" + i);
// 调用put方法存值
values.put("name", person.getName());
values.put("phone", person.getPhone());
// 执行插入
personDao.insert(values);
}
}
public void update() {
PersonDao personDao = new PersonDaoImpl(getContext());
// 参数
ContentValues values = new ContentValues();
// 创建person实体对象
Person person = new Person(1, "xxxrxxx", "15031985581");
// 调用put方法存值
values.put("name", person.getName());
values.put("phone", person.getPhone());
// 执行插入
//personDao.update(values, person.getId());
}
public void delete() {
PersonDao personDao = new PersonDaoImpl(getContext());
// 创建person实体对象
for (int i = 1; i < 200; i++){
Person person = new Person(i,null,null);
}
// 执行插入
//personDao.delete(person.getId());
}
public void findAll() {
PersonDao personDao = new PersonDaoImpl(getContext());
List<Person> persons = personDao.findAll();
for (Person p : persons) {
Log.v(TAG, p.toString());
}
}
public void findByName() {
PersonDao personDao = new PersonDaoImpl(getContext());
List<Person> persons = personDao.findByName(new String[] { "%p1%" });
for (Person p : persons) {
Log.v(TAG, p.toString());
}
}
public void getNowPageInfo() {
PersonDao personDao = new PersonDaoImpl(getContext());
List<Person> persons = personDao.getNowPageInfo(
new String[] { "%p1%" }, "id desc", "0,5");
for (Person p : persons) {
Log.v(TAG, p.toString());
}
}
}
//------------------新建 PersonContentProvider 类 继承 ContentProvider-----------------------------------------------------------
// 数据共享的操作
public class PersonContentProvider extends ContentProvider {
// contentProvider唯一标识
private static final String AUTHORITY = "com.example.lession05_dbs.personprovider";
// 卧底uri
private static final String BASEURI = "content://com.example.lession05_dbs.personprovider";
// 解析uri的对象
private static UriMatcher uriMatcher;
// 查询所有的code
private static final int PERSONS = 1;
private static final int PERSON = 2;// 查询某个记录
private static final int PERSON_NAME = 3;// 根据用户名查询
private static final int INSERT = 4;// 插入数据
private static final int UPDATE = 5;// 更新数据
private static final int DELETE = 6;// 删除数据
private PersonDao personDao;
static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
// 查询所有的操作uri
uriMatcher.addURI(AUTHORITY, "/persons", PERSONS);
// content://com.example.lession05_dbs.personprovider/persons uri地址
uriMatcher.addURI(AUTHORITY, "person/#", PERSON); // # 理解为某个数据的id
// content://com.example.lession05_dbs.personprovider/person/1
uriMatcher.addURI(AUTHORITY, "person/name", PERSON_NAME);
// 逻辑业务
uriMatcher.addURI(AUTHORITY, "insert", INSERT);
// content://com.example.lession05_dbs.personprovider/insert
uriMatcher.addURI(AUTHORITY, "update", UPDATE);
// content://com.example.lession05_dbs.personprovider/update
uriMatcher.addURI(AUTHORITY, "delete", DELETE);
// content://com.example.lession05_dbs.personprovider/delete
}
@Override
public boolean onCreate() {
// 创建数据库操作对象
personDao = new PersonDaoImpl(getContext());
return true;
}
/*@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) { // 匹配返回它解析的code码
int code = uriMatcher.match(uri);
Log.v("PersonContentProvider",
"------------" + code + "==" + uri.toString());
Cursor cursor = null;
switch (code) {
case PERSONS:
cursor = personDao.findAlls();
Log.v("PersonContentProvider", "----" + cursor);
break;
default:
Toast.makeText(getContext(), "uri解析不匹配的操作", Toast.LENGTH_LONG)
.show();
break;
}
return cursor;
}*/
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// 匹配返回它解析的code码
int code = uriMatcher.match(uri);
Log.v("PersonContentProvider",
"------------" + code + "==" + uri.toString());
Cursor cursor = null;
switch (code) {
case PERSONS:
cursor = personDao.findAlls();
Log.v("PersonContentProvider", "----" + cursor);
break;
case PERSON:
int id = (int) ContentUris.parseId(uri);
cursor = personDao.findById(id);
break;
case PERSON_NAME:
if (selectionArgs.length > 0) {
cursor = personDao.findByNames(selectionArgs[0]);
} else {
Log.v("PersonContentProvider", "----请传递用户名");
}
break;
default:
Toast.makeText(getContext(), "uri解析不匹配的操作", Toast.LENGTH_LONG)
.show();
break;
}
return cursor;
}
// 告诉调用者。操作的uri是操作的集合数据,还是单个数据
@Override
public String getType(Uri uri) {
String result = null;
switch (uriMatcher.match(uri)) {
case PERSONS:
result = "vnd.android.cursor.dir/persons";
break;
case PERSON:
result = "vnd.android.cursor.item/person";
break;
default:
break;
}
return result;
}
@SuppressWarnings("static-access")
@Override
// 发送改变的通知
public Uri insert(Uri uri, ContentValues values) {
Uri uris = null;
if (uriMatcher.match(uri) == INSERT) {
long id = personDao.insert(values);
getContext().getContentResolver().notifyChange(uri.parse(BASEURI),
null);
uris.parse("content://" + AUTHORITY + "/insert/" + id);
}
return uris;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
int l = 0;
if (uriMatcher.match(uri) == DELETE) {
l = personDao.delete(selection, selectionArgs);
}
return l;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
int l = 0;
if (uriMatcher.match(uri) == UPDATE) {
l = personDao.update(values, selection, selectionArgs);
}
return l;
}
}
---------------------------------------------------------------------------------------------------------------------------
---------------------------再新建项目lession_other-----------------------------------------------
----------------------------------------------------------新建测试类-------------------------------------------------------------------
public class TestContentProvider extends AndroidTestCase{
public void findAll() {
// 内容解析器对象
ContentResolver contentResolver = getContext().getContentResolver();
// 调用contentProvider签名相同的方法 Uri一定要与自定义的 uri匹配
/**
* 匹配: uri地址
*/
Cursor cursor = contentResolver
.query(Uri
.parse("content://com.example.lession05_dbs.personprovider/persons"),
null, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
Log.v("TestContentProvider",
"用户名:"
+ cursor.getString(cursor
.getColumnIndex("name"))
+ "-----电话:"
+ cursor.getString(cursor
.getColumnIndex("phone")));
}
cursor.close();
} else {
Log.v("TestContentProvider", "返回的cursor对象是null");
}
}
public void findByName() {
// 内容解析器对象
ContentResolver contentResolver = getContext().getContentResolver();
// 调用contentProvider签名相同的方法 Uri一定要与自定义的 uri匹配
Cursor cursor = contentResolver
.query(Uri
.parse("content://com.example.lession05_dbs.personprovider/person/name"),
null, null, new String[]{"%p1%"}, null);
if (cursor != null) {
while (cursor.moveToNext()) {
Log.v("TestContentProvider",
"用户名:"
+ cursor.getString(cursor
.getColumnIndex("name"))
+ "-----电话:"
+ cursor.getString(cursor
.getColumnIndex("phone")));
}
cursor.close();
} else {
Log.v("TestContentProvider", "返回的cursor对象是null");
}
}
public void findById() {
// 内容解析器对象
ContentResolver contentResolver = getContext().getContentResolver();
// 调用contentProvider签名相同的方法 Uri一定要与自定义的 uri匹配
Cursor cursor = contentResolver
.query(Uri
.parse("content://com.example.lession05_dbs.personprovider/person/6"),
null, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
Log.v("TestContentProvider",
"用户名:"
+ cursor.getString(cursor
.getColumnIndex("name"))
+ "-----电话:"
+ cursor.getString(cursor
.getColumnIndex("phone")));
}
cursor.close();
} else {
Log.v("TestContentProvider", "返回的cursor对象是null");
}
}
public void insert() {
// 内容解析器对象
ContentResolver contentResolver = getContext().getContentResolver();
Uri uri=Uri.parse("content://com.example.lession05_dbs.personprovider/insert");
ContentValues values = new ContentValues();
values.put("name", "XXXpp");
values.put("phone", "15031985581");
contentResolver.insert(uri, values);
}
public void update() {
// 内容解析器对象
ContentResolver contentResolver = getContext().getContentResolver();
Uri uri=Uri.parse("content://com.example.lession05_dbs.personprovider/update");
ContentValues values = new ContentValues();
values.put("name", "chrpxxx");
values.put("phone", "15031985581");
contentResolver.update(uri, values,"id=?",new String[]{200+""});
}
public void delete() {
// 内容解析器对象
ContentResolver contentResolver = getContext().getContentResolver();
Uri uri=Uri.parse("content://com.example.lession05_dbs.personprovider/delete");
contentResolver.delete(uri, "id=?", new String[]{200+""});
}
}