利用provider查找其他APP的数据库

需要调用的APP中的代码

public class DatabaseProvider extends ContentProvider {

	private DBHelper dbhelper = null;
	private SQLiteDatabase mdb = null;
	private static final UriMatcher urimatcher;
        
	private static final String AUTHORITY = "westone.md.enterprisecontracts.database.DatabaseProvider";

	private static final int STAFFINFO = 1;
	private static final int ENTERPRISE = 2;
	private static final int STAFFELEMENT = 3;
	private static final int SUBSECTOR = 4;
	private static final int SUBSTAFF = 5;

	static {
		urimatcher = new UriMatcher(UriMatcher.NO_MATCH);
		urimatcher.addURI(AUTHORITY, DB_TABLENAME_STAFFINFO, STAFFINFO);
		urimatcher.addURI(AUTHORITY, DB_TABLENAME_ENTERPRISE, ENTERPRISE);
		urimatcher.addURI(AUTHORITY, DB_TABLENAME_STAFFELEMENT, STAFFELEMENT);
		urimatcher.addURI(AUTHORITY, DB_TABLENAME_SUBSECTOR, SUBSECTOR);
		urimatcher.addURI(AUTHORITY, DB_TABLENAME_SUBSTAFF, SUBSTAFF);
	}

	@Override
	public boolean onCreate() {
		// 初始化MyDBHelper
		dbhelper = new DBHelper(this.getContext());
		mdb = dbhelper.getReadableDatabase();
		Log.d("westone.md.enterprisecontracts.database.DatabaseProvider", "mdb:" + mdb);
		return false;
	}

	@Override
	public Cursor query(Uri uri, String[] projection, String selection,
			String[] selectionArgs, String sortOrder) {
		// uri.equals("content://westone.md.enterprisecontracts.DatabaseProvider/tb_staffinfo"
		Cursor mCursor = null;
		Log.d("westone.md.enterprisecontracts.database.DatabaseProvider",
				"query started");
		int result = urimatcher.match(uri);
		Log.d("westone.md.enterprisecontracts.database.DatabaseProvider", "uri:" + uri);
		Log.d("westone.md.enterprisecontracts.database.DatabaseProvider", "result:"
				+ result);
		switch (result) {
		case STAFFINFO:
			mCursor = mdb.query(DB_TABLENAME_STAFFINFO, null, null, null, null,
					null, null);
			Log.d("westone.md.enterprisecontracts.database.DatabaseProvider", "mCursor:"
					+ mCursor);
			return mCursor;
		case ENTERPRISE:
			mCursor = mdb.query(DB_TABLENAME_ENTERPRISE, null, null, null,
					null, null, null);
			Log.d("westone.md.enterprisecontracts.database.DatabaseProvider", "mCursor:"
					+ mCursor);
			return mCursor;
		case STAFFELEMENT:
			mCursor = mdb.query(DB_TABLENAME_STAFFELEMENT, null, null, null,
					null, null, null);
			Log.d("westone.md.enterprisecontracts.database.DatabaseProvider", "mCursor:"
					+ mCursor);
			return mCursor;
		case SUBSECTOR:
			mCursor = mdb.query(DB_TABLENAME_SUBSECTOR, null, null, null, null,
					null, null);
			Log.d("westone.md.enterprisecontracts.database.DatabaseProvider", "mCursor:"
					+ mCursor);
			return mCursor;
		case SUBSTAFF:
			mCursor = mdb.query(DB_TABLENAME_SUBSTAFF, null, null, null, null,
					null, null);
			Log.d("westone.md.enterprisecontracts.database.DatabaseProvider", "mCursor:"
					+ mCursor);
			return mCursor;
		default:
			return null;
		}
	}

	@Override
	public int delete(Uri arg0, String arg1, String[] arg2) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public String getType(Uri arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Uri insert(Uri arg0, ContentValues arg1) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int update(Uri arg0, ContentValues arg1, String arg2, String[] arg3) {
		// TODO Auto-generated method stub
		return 0;
	}

}


Mannifest中的写法

<provider
            android:name="westone.md.enterprisecontracts.database.DatabaseProvider"
            android:authorities="westone.md.enterprisecontracts.database.DatabaseProvider"
            android:exported="true" />

测试的APP中的代码写法

public class MainActivity extends ActionBarActivity {
	
	private final static String TAG  = "com.example.liuchengtest.MainActivity";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Log.d(TAG, "MainActivity started");
		//开放的表:tb_staffinfo,tb_enterprise,tb_staffelement,tb_subsector,tb_substaff,
		//获取不同的表,将最后一个表名,改成需要的表名,如tb_staffinfo
		Uri uri = Uri.parse("content://westone.md.enterprisecontracts.database.DatabaseProvider/tb_staffinfo");
		ContentResolver contentResolver = getContentResolver();
		Cursor cursor = contentResolver.query(uri, null, null, null, null);

		Log.d(TAG, "cursor: " + cursor);
		Log.d(TAG, "movetofist status : " + cursor.moveToFirst());

		if (cursor == null || !cursor.moveToFirst()) {
			Log.d(TAG, "The cursor is null or the stable is null");
			return;
		} else {
			Log.d(TAG, "Begin to print infomation");
			//name是表列的title
			String name = cursor.getString(cursor.getColumnIndex("name"));//这里加一行输出,要不然while里面输出没有第一行
			Log.d(TAG, "" + name);
			while (cursor.moveToNext()) {
				name = cursor.getString(cursor.getColumnIndex("name"));
				Log.d(TAG, "" + name);
				}
			cursor.close();
			}
		}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值