ch023 Android ContentProvider(第一部分,单元测试)
--------------------------------------------AndroidManifest.xml----------------------------------
<manifestxmlns: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-libraryandroid:name="android.test.runner"/>
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!--注册ContentProvider-->
<providerandroid:name=".provider.MyProvider"android:authorities="com.ch23.provider.myprovider"></provider>
</application>
<!--单元测试声明-->
<instrumentationandroid:name="android.test.InstrumentationTestRunner"android:targetPackage="com.ch23"></instrumentation>
</manifest>
--------------------------------------------Layoutactivity_main.xml-----------------------------
<LinearLayoutxmlns: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>
--------------------------------------------ActivityMainActivity.java-----------------------------
packagecom.ch23;
importandroid.app.Activity;
importandroid.os.Bundle;
publicclassMainActivityextendsActivity{
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
--------------------------------------------DB目录Const.java-----------------------------------
packagecom.ch23.db;
/*常量类*/
publicclassConst{
publicfinalstaticStringCONTENTPROVIDER="com.ch23.provider.myprovider";
/*UriC,代表返回多条数据*/
publicfinalstaticintSTU_LIST=1;
/*UriD*,代表返回一条数据*/
publicfinalstaticintSTU_DETAIL=2;
}
--------------------------------------------DB目录DBHelper.java-------------------------------
packagecom.ch23.db;
importandroid.content.ContentValues;
importandroid.content.Context;
importandroid.database.Cursor;
importandroid.database.sqlite.SQLiteDatabase;
importandroid.database.sqlite.SQLiteOpenHelper;
/**
*
*项目名称:com.ch23
*类名称:DBHelper
*类描述:数据库操作工具类
*创建人:方勇
*创建时间:2012-12-10下午8:25:47
*Copyright(c)方勇-版权所有
*/
publicclassDBHelper{
privatestaticDatabaseHelperdatabaseHelper;//数据库定义语言,创建数据库,DDL,定义数据结构
privatestaticSQLiteDatabasedb;//数据库操作对象,DML,数据库操作
privateStringDATABASE_NAME="a07.db";
privateintDATABASE_VERSION=1;//数据库版本,必须赋值
privateContextcontext;//定义一个上下文对象
/*构造方法*/
publicDBHelper(Contextcontext){
this.context=context;
}
/*打开数据库的方法*/
publicDBHelperopen(){
databaseHelper=newDatabaseHelper(context);
db=databaseHelper.getWritableDatabase();
returnthis;
}
//关闭数据库
publicvoidclose(){
db.close();
databaseHelper.close();
}
/*插入数据*/
publiclonginsert(StringtableName,ContentValuesvalues){
returndb.insert(tableName,null,values);
}
/*删除数据*/
publicbooleandelete(StringtableName,StringwhereClause,
String[]whereArgs){
returndb.delete(tableName,whereClause,whereArgs)>0;
}
/*更新数据*/
publicbooleanupdate(StringtableName,ContentValuesvalues,
StringwhereClause,String[]whereArgs){
returndb.update(tableName,values,whereClause,whereArgs)>0;
}
/*取得一个列表*/
publicCursorfindList(StringtableName,String[]columns,
Stringselection,String[]selectionArgs,StringgroupBy,
Stringhaving,StringOrderBy){
returndb.query(tableName,columns,selection,selectionArgs,groupBy,
having,OrderBy);
}
/*取得单行记录*/
publicCursorfindInfo(StringtableName,String[]columns,
Stringselection,String[]selectionArgs,StringgroupBy,
Stringhaving,StringorderBy){
Cursorcursor=db.query(tableName,columns,selection,selectionArgs,
groupBy,having,orderBy);
while(cursor.moveToNext()){
cursor.moveToFirst();
}
returncursor;
}
/*执行sql语句*/
publicvoidexecuteSql(Stringsql){
db.execSQL(sql);
}
/*SQLiteopenHelper是一个抽象类,来管理数据库的创建和版本的管理*/
privateclassDatabaseHelperextendsSQLiteOpenHelper{
publicDatabaseHelper(Contextcontext){
super(context,DATABASE_NAME,null,DATABASE_VERSION);
}
//创建表结构
@Override
publicvoidonCreate(SQLiteDatabasedb){
db.execSQL("createtableifnotexistsstu(idintegerprimarykey,nametext)");
db.execSQL("insertintostuvalues(1,'a1')");
db.execSQL("insertintostuvalues(2,'a2')");
db.execSQL("insertintostuvalues(3,'a3')");
}
@Override
publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
}
}
}
--------------------------------------------provider目录MyProvider.java-----------------------
packagecom.ch23.provider;
importcom.ch23.db.Const;
importcom.ch23.db.DBHelper;
importandroid.content.ContentProvider;
importandroid.content.ContentUris;
importandroid.content.ContentValues;
importandroid.content.UriMatcher;
importandroid.database.Cursor;
importandroid.net.Uri;
/**
*
*项目名称:com.ch23
*类名称:MyProvider
*类描述:对外应用程序提供数据
*创建人:方勇
*创建时间:2012-12-10下午8:26:09
*Copyright(c)方勇-版权所有
*/
publicclassMyProviderextendsContentProvider{
/*数据库操作*/
privateDBHelperdbHelper;
/*匹配工具类*/
privatestaticfinalUriMatcherMATCHER=newUriMatcher(
UriMatcher.NO_MATCH);
/*初始化数据,匹配工具类*/
static{
MATCHER.addURI(Const.CONTENTPROVIDER,"stu",Const.STU_LIST);
MATCHER.addURI(Const.CONTENTPROVIDER,"stu/#",Const.STU_DETAIL);
}
@Override
publicbooleanonCreate(){
dbHelper=newDBHelper(this.getContext());
/*打开数据库*/
dbHelper.open();
returnfalse;
}
@Override
publicintdelete(Uriuri,Stringselection,String[]selectionArgs){
return0;
}
@Override
publicStringgetType(Uriuri){
returnnull;
}
@Override
publicUriinsert(Uriuri,ContentValuesvalues){
returnnull;
}
@Override
publicCursorquery(Uriuri,String[]projection,Stringselection,
String[]selectionArgs,StringsortOrder){
/*匹配URI,是C还是D*/
switch(MATCHER.match(uri)){
/*多条记录*/
caseConst.STU_LIST:
returndbHelper.findList("stu",null,null,null,null,null,null);
caseConst.STU_DETAIL:
longid=ContentUris.parseId(uri);
Stringwhere="id="+id;
//where+="and"+selection;
returndbHelper.findList("stu",null,where,null,null,null,null);
default:
thrownewIllegalArgumentException("urierror"+uri.toString());
}
}
@Override
publicintupdate(Uriuri,ContentValuesvalues,Stringselection,
String[]selectionArgs){
return0;
}
}
--------------------------------------------provider目录Test.java-------------------------------
packagecom.ch23.provider;
importcom.ch23.db.Const;
importandroid.content.ContentResolver;
importandroid.database.Cursor;
importandroid.net.Uri;
importandroid.test.AndroidTestCase;
/*单元测试*/
publicclassTestextendsAndroidTestCase{
publicvoidtestQuery(){
/*取数据对象*/
ContentResolverresolver=this.getContext().getContentResolver();
/*查询所有的数据*/
Uriuri=Uri.parse("content://"+Const.CONTENTPROVIDER+"/stuss");
/*取数据*/
Cursorcursor=resolver.query(uri,newString[]{"id","name"},null,null,null);
while(cursor.moveToNext()){
System.out.println("name:"+cursor.getString(cursor.getColumnIndex("name")));
}
}
}
--------------------------------------------结果----------------------------------------------------
<!--EndFragment-->
更多相关文章
- android sd卡读取数据库
- Android架构组件- Room数据库的使用
- Android 5.1 open data flow 数据开启流程
- ContentProvider数据共享
- android root后数据安全
- Android基础笔记(四)-数据存储和界面展现
- Android中数据存储的5种方法
- Android数据加密之Des加密
- Android 数据库之 SQLiteConnectionPool 源码分析