Android中数据共享的操作

首先新建安卓项目 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+""});
		
	}

}


 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值