--------------------------------------------AndroidManifest.xml----------------------------------
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ch23"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<!-- 单元测试包-->
<uses-library android:name="android.test.runner"/>
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- 注册ContentProvider -->
<provider android:name=".provider.MyProvider" android:authorities="com.ch23.provider.myprovider"></provider>
</application>
<!-- 单元测试声明 -->
<instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.ch23"></instrumentation>
</manifest>
--------------------------------------------Layout activity_main.xml-----------------------------
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
</LinearLayout>
--------------------------------------------Activity MainActivity.java-----------------------------
package com.ch23;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
--------------------------------------------DB目录 Const.java-----------------------------------
package com.ch23.db;
/*常量类*/
public class Const {
public final static String CONTENTPROVIDER = "com.ch23.provider.myprovider";
/* Uri C ,代表返回多条数据 */
public final static int STU_LIST = 1;
/* Uri D*,代表返回一条数据 */
public final static int STU_DETAIL = 2;
}
--------------------------------------------DB目录 DBHelper.java-------------------------------
package com.ch23.db;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
*
* 项目名称:com.ch23
* 类名称:DBHelper
* 类描述:数据库操作工具类
* 创建人:方勇
* 创建时间:2012-12-10 下午8:25:47
* Copyright (c) 方勇-版权所有
*/
public class DBHelper {
private static DatabaseHelper databaseHelper;// 数据库定义语言,创建数据库,DDL,定义数据结构
private static SQLiteDatabase db;// 数据库操作对象,DML,数据库操作
private String DATABASE_NAME = "a07.db";
private int DATABASE_VERSION = 1;// 数据库版本,必须赋值
private Context context;// 定义一个上下文对象
/* 构造方法 */
public DBHelper(Context context) {
this.context = context;
}
/* 打开数据库的方法 */
public DBHelper open() {
databaseHelper = new DatabaseHelper(context);
db = databaseHelper.getWritableDatabase();
return this;
}
// 关闭数据库
public void close() {
db.close();
databaseHelper.close();
}
/* 插入数据 */
public long insert(String tableName, ContentValues values) {
return db.insert(tableName, null, values);
}
/* 删除数据 */
public boolean delete(String tableName, String whereClause,
String[] whereArgs) {
return db.delete(tableName, whereClause, whereArgs) > 0;
}
/* 更新数据 */
public boolean update(String tableName, ContentValues values,
String whereClause, String[] whereArgs) {
return db.update(tableName, values, whereClause, whereArgs) > 0;
}
/* 取得一个列表 */
public Cursor findList(String tableName, String[] columns,
String selection, String[] selectionArgs, String groupBy,
String having, String OrderBy) {
return db.query(tableName, columns, selection, selectionArgs, groupBy,
having, OrderBy);
}
/* 取得单行记录 */
public Cursor findInfo(String tableName, String[] columns,
String selection, String[] selectionArgs, String groupBy,
String having, String orderBy) {
Cursor cursor = db.query(tableName, columns, selection, selectionArgs,
groupBy, having, orderBy);
while (cursor.moveToNext()) {
cursor.moveToFirst();
}
return cursor;
}
/* 执行sql语句 */
public void executeSql(String sql) {
db.execSQL(sql);
}
/* SQLiteopenHelper是一个抽象类,来管理数据库的创建和版本的管理 */
private class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
// 创建表结构
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table if not exists stu(id integer primary key,name text)");
db.execSQL("insert into stu values(1,'a1')");
db.execSQL("insert into stu values(2,'a2')");
db.execSQL("insert into stu values(3,'a3')");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}
--------------------------------------------provider目录 MyProvider.java-----------------------
package com.ch23.provider;
import com.ch23.db.Const;
import com.ch23.db.DBHelper;
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.net.Uri;
/**
*
* 项目名称:com.ch23
* 类名称:MyProvider
* 类描述:对外应用程序提供数据
* 创建人:方勇
* 创建时间:2012-12-10 下午8:26:09
* Copyright (c) 方勇-版权所有
*/
public class MyProvider extends ContentProvider {
/* 数据库操作 */
private DBHelper dbHelper;
/* 匹配工具类 */
private static final UriMatcher MATCHER = new UriMatcher(
UriMatcher.NO_MATCH);
/* 初始化数据,匹配工具类 */
static {
MATCHER.addURI(Const.CONTENTPROVIDER, "stu", Const.STU_LIST);
MATCHER.addURI(Const.CONTENTPROVIDER, "stu/#", Const.STU_DETAIL);
}
@Override
public boolean onCreate() {
dbHelper = new DBHelper(this.getContext());
/* 打开数据库 */
dbHelper.open();
return false;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0;
}
@Override
public String getType(Uri uri) {
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
return null;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
/* 匹配URI,是C还是D */
switch (MATCHER.match(uri)) {
/*多条记录*/
case Const.STU_LIST:
return dbHelper.findList("stu", null, null, null, null, null, null);
case Const.STU_DETAIL:
long id = ContentUris.parseId(uri);
String where =" id="+ id;
//where+= " and "+selection;
return dbHelper.findList("stu", null, where, null, null, null, null);
default:
throw new IllegalArgumentException("uri error"+uri.toString());
}
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
return 0;
}
}
--------------------------------------------provider目录 Test.java-------------------------------
package com.ch23.provider;
import com.ch23.db.Const;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.test.AndroidTestCase;
/*单元测试*/
public class Test extends AndroidTestCase {
public void testQuery(){
/*取数据对象*/
ContentResolver resolver = this.getContext().getContentResolver();
/*查询所有的数据*/
Uri uri = Uri.parse("content://"+Const.CONTENTPROVIDER+"/stuss");
/*取数据*/
Cursor cursor = resolver.query(uri, new String[]{"id","name"},null, null, null);
while(cursor.moveToNext()){
System.out.println("name:"+cursor.getString(cursor.getColumnIndex("name")));
}
}
}
--------------------------------------------结果----------------------------------------------------