android中跨项目的数据库操作ContentProvider的使用

RuiXin.java类

package com.gtl.data.two;

import android.net.Uri;

public class RuiXin {
	
	public static final String DBNAME = "ruixinonlinedb"; 
    public static final String TNAME = "ruixinonline";
    public static final int VERSION = 3;
    
    public static String TID = "tid";
    public static final String USERNAME = "username";
    public static final String DATE = "date";
    public static final String SEX = "sex";
    
    public static final String AUTOHORITY = "com.gtl.data.two";
    public static final int ITEM = 1;
    public static final int ITEM_ID = 2;
    
    public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.ruixin.login";
    public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.ruixin.login";
    
    public static final Uri CONTENT_URI = Uri.parse("content://" + AUTOHORITY + "/ruixinonline");
}

DBlite.java类

package com.gtl.data.two;

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBlite extends SQLiteOpenHelper {

	public DBlite(Context context) {
		super(context, RuiXin.DBNAME, null, RuiXin.VERSION);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL("create table "+RuiXin.TNAME+"(" +
                 RuiXin.TID+" integer primary key autoincrement not null,"+
                 RuiXin.USERNAME+" text not null," +
                 RuiXin.DATE+" interger not null,"+
                 RuiXin.SEX+" text not null);");

	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		db.execSQL("DROP TABLE IF EXISTS "+RuiXin.TNAME);
		onCreate(db);
	}
	
	public void add(String username,String date,String sex){
        SQLiteDatabase db = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(RuiXin.USERNAME, username);
        values.put(RuiXin.DATE, date);
        values.put(RuiXin.SEX, sex);
        db.insert(RuiXin.TNAME,"",values);
	}
	
	public void del(){
		 SQLiteDatabase db = getWritableDatabase();
		 db.delete(RuiXin.TNAME,RuiXin.DATE+"=?" , new String[]{"time=1368497000287"});
	}
	
	public void update(){
		SQLiteDatabase db = getWritableDatabase();
		ContentValues values = new ContentValues();
		values.put(RuiXin.USERNAME, "louis koo");
	    values.put(RuiXin.DATE, "today");
	    values.put(RuiXin.SEX, "男");
		db.update(RuiXin.TNAME, values, RuiXin.DATE+"=?" , new String[]{"time=1368497006097"});
	}
}

MyProvider.java类

package com.gtl.data.two;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.text.TextUtils;

public class MyProvider extends ContentProvider {
	
	DBlite dBlite;
    SQLiteDatabase db;
    private static final UriMatcher sMatcher;
    static{
            sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
            sMatcher.addURI(RuiXin.AUTOHORITY,RuiXin.TNAME, RuiXin.ITEM);
            sMatcher.addURI(RuiXin.AUTOHORITY, RuiXin.TNAME+"/#", RuiXin.ITEM_ID);

    }
	@Override
	public boolean onCreate() {
		this.dBlite = new DBlite(this.getContext());
		return true;
	}

	@Override
	public Cursor query(Uri uri, String[] projection, String selection,
			String[] selectionArgs, String sortOrder) {
		 db = dBlite.getWritableDatabase();                
         Cursor c;
         switch (sMatcher.match(uri)) {
	         case RuiXin.ITEM:
	                 c = db.query(RuiXin.TNAME, projection, selection, selectionArgs, null, null, null);
	                 break;
	         case RuiXin.ITEM_ID:
	                 String id = uri.getPathSegments().get(1);
	                 c = db.query(RuiXin.TNAME, projection, 
	                		 RuiXin.TID+"="+id+(!TextUtils.isEmpty(selection)?"AND("+selection+')':""),
	                		 selectionArgs, null, null, sortOrder);
	             break;
	         default:
	                 throw new IllegalArgumentException("Unknown URI"+uri);
         }
         c.setNotificationUri(getContext().getContentResolver(), uri);
         return c;
	}

	@Override
	public String getType(Uri uri) {
		switch (sMatcher.match(uri)) {
		    case RuiXin.ITEM:
		        return RuiXin.CONTENT_TYPE;
		    case RuiXin.ITEM_ID:
		        return RuiXin.CONTENT_ITEM_TYPE;
		    default:
		        throw new IllegalArgumentException("Unknown URI"+uri);
	    }
	}

	@Override
	public Uri insert(Uri uri, ContentValues values) {
		db = dBlite.getWritableDatabase();
        long rowId;
        if(sMatcher.match(uri)!=RuiXin.ITEM){
             throw new IllegalArgumentException("Unknown URI"+uri);
        }
        rowId = db.insert(RuiXin.TNAME,RuiXin.TID,values);
        if(rowId>0){
            Uri noteUri=ContentUris.withAppendedId(RuiXin.CONTENT_URI, rowId);
            getContext().getContentResolver().notifyChange(noteUri, null);
            return noteUri;
        }
        throw new IllegalArgumentException("Unknown URI"+uri);
	}

	@Override
	public int delete(Uri uri, String selection, String[] selectionArgs) {
		 db = dBlite.getWritableDatabase();
         int count = 0;
         switch (sMatcher.match(uri)) {
	         case RuiXin.ITEM:
	              count = db.delete(RuiXin.TNAME,selection, selectionArgs);
	              break;
	         case RuiXin.ITEM_ID:
	              String id = uri.getPathSegments().get(1);
	              count = db.delete(RuiXin.TID, 
	             		 RuiXin.TID+"="+id+(!TextUtils.isEmpty(RuiXin.TID="?")?"AND("+selection+')':""), 
	             		 selectionArgs);
	             break;
	         default:
	                 throw new IllegalArgumentException("Unknown URI"+uri);
         }
         getContext().getContentResolver().notifyChange(uri, null);
         return count;
	}

	@Override
	public int update(Uri uri, ContentValues values, String selection,
			String[] selectionArgs) {
		SQLiteDatabase db = dBlite.getWritableDatabase();
		int count;
		switch (sMatcher.match(uri)){
			case RuiXin.ITEM:
				count = db.update(RuiXin.TNAME, values, selection, selectionArgs);
				break;
			case RuiXin.ITEM_ID:
				String Id = uri.getPathSegments().get(1);
				count = db.update(RuiXin.TNAME, values,
						RuiXin.TID + "=" + Id + (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""),
						selectionArgs);
				break;

			default:
				throw new IllegalArgumentException("Unknown URI " + uri);
		}
		getContext().getContentResolver().notifyChange(uri, null);
		return count;
	}

}
主类Test.java类

package com.gtl.data.two;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import com.gtl.R;

public class Test extends Activity implements OnClickListener{
	
	private DBlite dBlite1 ;
    private ContentResolver contentResolver;
    private Button addbtn,delbtn,querybtn,updatebtn;
    private ListView lv;
    
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		dBlite1 = new DBlite(this);
		setContentView(R.layout.contentprovide);
		addbtn = (Button)findViewById(R.id.btnadd);
		delbtn = (Button)findViewById(R.id.btndelete);
		querybtn = (Button)findViewById(R.id.btnquery);
		updatebtn = (Button)findViewById(R.id.btnupdate);
		addbtn.setOnClickListener(this);
		delbtn.setOnClickListener(this);
		querybtn.setOnClickListener(this);
		updatebtn.setOnClickListener(this);
		lv = (ListView)findViewById(R.id.lv);
		
	}

	private List<String> strlist;
	@Override
	public void onClick(View v) {
		if(v==addbtn){
			dBlite1.add("carman lee","time="+System.currentTimeMillis(),"女");
		}else if(v==delbtn){
			dBlite1.del();
		}else if(v==querybtn){
			//通过contentResolver进行查找
			strlist = new ArrayList<String>();
			contentResolver = this.getContentResolver();
			Cursor cursor = contentResolver.query(
		        RuiXin.CONTENT_URI, new String[] {RuiXin.USERNAME,
		        RuiXin.DATE,RuiXin.SEX }, null, null, null);
	        while (cursor.moveToNext()) {
	        	strlist.add(cursor.getString(cursor.getColumnIndex(RuiXin.USERNAME))
	                    + " "+ cursor.getString(cursor.getColumnIndex(RuiXin.DATE))
	                    + " "+ cursor.getString(cursor.getColumnIndex(RuiXin.SEX)));
	       }
	       startManagingCursor(cursor);  //查找后关闭游标
	       ArrayAdapter<String> adpater = new ArrayAdapter<String>(Test.this,
	    		   android.R.layout.simple_expandable_list_item_1,strlist);
	       lv.setAdapter(adpater);
		}else if(v==updatebtn){
			dBlite1.update();
		}
		
	}

}

接下来在另外一个项目中进行测试,共用一个数据库

MainActivity.java类

package com.example.contentprovidertest;

import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {
	
	private ContentResolver contentResolver;
	private List<String> strlist;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		ListView lv = new ListView(this);
		//通过contentResolver进行查找
		strlist = new ArrayList<String>();
		contentResolver = this.getContentResolver();
		Cursor cursor = contentResolver.query(
	        RuiXin.CONTENT_URI, new String[] {RuiXin.USERNAME,
	        RuiXin.DATE,RuiXin.SEX }, null, null, null);
        while (cursor.moveToNext()) {
        	strlist.add(cursor.getString(cursor.getColumnIndex(RuiXin.USERNAME))
                    + " "+ cursor.getString(cursor.getColumnIndex(RuiXin.DATE))
                    + " "+ cursor.getString(cursor.getColumnIndex(RuiXin.SEX)));
       }
       startManagingCursor(cursor);  //查找后关闭游标
       ArrayAdapter<String> adpater = new ArrayAdapter<String>(this,
    		   android.R.layout.simple_expandable_list_item_1,strlist);
       lv.setAdapter(adpater);
       setContentView(lv);
		
	}

}

将参数也复制到该项目工程中去

清单文件AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gtl"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >

         <activity android:name=".data.two.Test">
              <intent-filter >
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
             </intent-filter>
             <intent-filter>
                 <data android:mimeType="vnd.android.cursor.dir/vnd.ruixin.login" />
             </intent-filter>
             <intent-filter>
                 <data android:mimeType="vnd.android.cursor.item/vnd.ruixin.login" />
             </intent-filter>
         </activity>
         <provider android:name=".data.two.MyProvider"
             android:authorities="com.gtl.data.two"></provider>

 </application>

</manifest>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值