在 Android 中使用 SQLite ContentProvider.docx

上传人:b****5 文档编号:4704671 上传时间:2022-12-07 格式:DOCX 页数:12 大小:18.65KB
下载 相关 举报
在 Android 中使用 SQLite ContentProvider.docx_第1页
第1页 / 共12页
在 Android 中使用 SQLite ContentProvider.docx_第2页
第2页 / 共12页
在 Android 中使用 SQLite ContentProvider.docx_第3页
第3页 / 共12页
在 Android 中使用 SQLite ContentProvider.docx_第4页
第4页 / 共12页
在 Android 中使用 SQLite ContentProvider.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

在 Android 中使用 SQLite ContentProvider.docx

《在 Android 中使用 SQLite ContentProvider.docx》由会员分享,可在线阅读,更多相关《在 Android 中使用 SQLite ContentProvider.docx(12页珍藏版)》请在冰豆网上搜索。

在 Android 中使用 SQLite ContentProvider.docx

在Android中使用SQLiteContentProvider

Android-数据库支持(SQLite),内容提供器(ContentProvider)

系出名门Android(9)-数据库支持(SQLite),内容提供器(ContentProvider)

作者:

webabcd

介绍

在Android中使用SQLite,ContentProvider

数据库支持(SQLite)-Android开发平台提供了操作SQLite数据库的相关API

内容提供器(ContentProvider)-当数据需要在应用程序之间共享时,可以在某程序中使用ContentProvider定义URI,以使其它应用程序可以通过此URI访问指定的数据

1、SQLite的Demo

DatabaseHelper.java

代码

packagecom.webabcd.SQLite;

importandroid.content.Context;

importandroid.database.sqlite.SQLiteDatabase;

importandroid.database.sqlite.SQLiteOpenHelper;

importandroid.database.sqlite.SQLiteDatabase.CursorFactory;

//数据库操作的Helper类

publicclassDatabaseHelperextendsSQLiteOpenHelper{

DatabaseHelper(Contextcontext,Stringname,CursorFactorycursorFactory,intversion){

super(context,name,cursorFactory,version);

}

@Override

publicvoidonCreate(SQLiteDatabasedb){

//TODO创建数据库后,对数据库的操作

}

@Override

publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){

//TODO更改数据库版本的操作

}

@Override

publicvoidonOpen(SQLiteDatabasedb){

super.onOpen(db);

//TODO每次成功打开数据库后首先被执行

}

}

Main.java

代码

packagecom.webabcd.SQLite;

importjava.util.Random;

importandroid.app.Activity;

importandroid.content.ContentValues;

importandroid.database.Cursor;

importandroid.database.SQLException;

importandroid.database.sqlite.SQLiteDatabase;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.widget.Button;

importandroid.widget.TextView;

publicclassMainextendsActivity{

privateDatabaseHelperdbHelper;

privatestaticfinalStringDATABASE_NAME="db.db";

privatestaticfinalintDATABASE_VERSION=1;

privatestaticfinalStringTABLE_NAME="employee";

TextViewtxtMsg;

/**Calledwhentheactivityisfirstcreated.*/

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

dbHelper=newDatabaseHelper(this,DATABASE_NAME,null,

DATABASE_VERSION);

txtMsg=(TextView)this.findViewById(R.id.txtMsg);

Buttonbtn1=(Button)this.findViewById(R.id.btn1);

btn1.setText("创建表");

btn1.setOnClickListener(newButton.OnClickListener(){

publicvoidonClick(Viewv){

CreateTable();

}

});

Buttonbtn2=(Button)this.findViewById(R.id.btn2);

btn2.setText("插入3条记录");

btn2.setOnClickListener(newButton.OnClickListener(){

publicvoidonClick(Viewv){

insertItem();

}

});

Buttonbtn3=(Button)this.findViewById(R.id.btn3);

btn3.setText("删除全部记录");

btn3.setOnClickListener(newButton.OnClickListener(){

publicvoidonClick(Viewv){

deleteItem();

}

});

Buttonbtn4=(Button)this.findViewById(R.id.btn4);

btn4.setText("更新指定数据");

btn4.setOnClickListener(newButton.OnClickListener(){

publicvoidonClick(Viewv){

updateItem();

}

});

Buttonbtn5=(Button)this.findViewById(R.id.btn5);

btn5.setText("显示全部数据");

btn5.setOnClickListener(newButton.OnClickListener(){

publicvoidonClick(Viewv){

showItems();

}

});

Buttonbtn6=(Button)this.findViewById(R.id.btn6);

btn6.setText("删除表");

btn6.setOnClickListener(newButton.OnClickListener(){

publicvoidonClick(Viewv){

dropTable();

}

});

}

//创建数据表

privatevoidCreateTable(){

SQLiteDatabasedb=dbHelper.getWritableDatabase();

Stringsql="CREATETABLEIFNOTEXISTS"+TABLE_NAME

+"(IDINTEGERPRIMARYKEY,NameVARCHAR,AgeINTEGER);";

try{

db._execSQL(sql);

txtMsg.append("数据表成功创建\n");

}catch(SQLExceptionex){

txtMsg.append("数据表创建错误\n"+ex.toString()+"\n");

}

}

//插入数据

privatevoidinsertItem(){

SQLiteDatabasedb=dbHelper.getWritableDatabase();

try{

Randomrandom=newRandom();

for(inti=0;i<3;i++){

Stringsql="insertinto"+TABLE_NAME

+"(name,age)values('name"+String.valueOf(i)

+"',"+random.nextInt()+")";

//_execSQL()-执行指定的sql

db._execSQL(sql);

}

txtMsg.append("成功插入3条数据\n");

}catch(SQLExceptionex){

txtMsg.append("插入数据失败\n"+ex.toString()+"\n");

}

}

//删除数据

privatevoiddeleteItem(){

try{

SQLiteDatabasedb=dbHelper.getWritableDatabase();

db.delete(TABLE_NAME,"id<999999",null);

txtMsg.append("成功删除数据\n");

}catch(SQLExceptione){

txtMsg.append("删除数据失败\n");

}

}

//更新数据

privatevoidupdateItem(){

SQLiteDatabasedb=dbHelper.getWritableDatabase();

try{

ContentValuesvalues=newContentValues();

values.put("name","批量更新后的名字");

db.update(TABLE_NAME,values,"id

",newString[]{"3"});

txtMsg.append("成功更新数据\n");

}catch(SQLExceptione){

txtMsg.append("更新数据失败\n");

}

}

//查询数据

privatevoidshowItems(){

SQLiteDatabasedb=dbHelper.getReadableDatabase();

try{

String[]column={"id","name","age"};

Cursorcursor=db.query(TABLE_NAME,column,null,null,null,

null,null);

Integernum=cursor.getCount();

txtMsg.append("共"+Integer.toString(num)+"条记录\n");

cursor.moveToFirst();

while(cursor.getPosition()!

=cursor.getCount()){

txtMsg.append(Integer.toString(cursor.getPosition())+","

+String.valueOf(cursor.getString(0))+","

+cursor.getString

(1)+","

+String.valueOf(cursor.getString

(2))+"\n");

cursor.moveToNext();

}

}catch(SQLExceptionex){

txtMsg.append("读取数据失败\n"+ex.toString()+"\n");

}

}

//删除数据表

privatevoiddropTable(){

SQLiteDatabasedb=dbHelper.getWritableDatabase();

Stringsql="DROPTABLEIFEXISTS"+TABLE_NAME;

try{

db._execSQL(sql);

txtMsg.append("数据表删除成功\n");

}catch(SQLExceptionex){

txtMsg.append("数据表删除错误\n"+ex.toString()+"\n");

}

}

}

2、ContentProvider的Demo

MyUser.java

代码

packagecom.webabcd.contentprovider;

import.Uri;

importandroid.provider.BaseColumns;

//自定义ContentProvider所需的实体类

publicclassMyUser{

//必须要有_id字段。

本例中BaseColumn类中已经包含了_id字段

publicstaticfinalclassUserimplementsBaseColumns{

//定义CONTENT_URI

publicstaticfinalUriCONTENT_URI=Uri.parse("content:

//com.webabcd.MyContentProvider");

//表数据列

publicstaticfinalStringUSER_NAME="USER_NAME";

}

}

MyContentProvider.java

代码

packagecom.webabcd.contentprovider;

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.FileOutputStream;

importorg.apache.http.util.EncodingUtils;

importandroid.content.ContentProvider;

importandroid.content.ContentUris;

importandroid.content.ContentValues;

importandroid.database.Cursor;

importandroid.database.MatrixCursor;

import.Uri;

//继承ContentProvider以实现自定义的ContentProvider(基于文件的信息存储)

publicclassMyContentProviderextendsContentProvider{

privateFilefile;

privateFileOutputStreamout;

privateFileInputStreamin;

//ContentProvider的删除数据接口

@Override

publicintdelete(Uriuri,Stringselection,String[]selectionArgs){

//TODOAuto-generatedmethodstub

return0;

}

@Override

publicStringgetType(Uriuri){

//TODOAuto-generatedmethodstub

returnnull;

}

//ContentProvider的插入数据接口

@Override

publicUriinsert(Uriuri,ContentValuesvalues){

try{

out=newFileOutputStream(file);

out.write(values.getAsString(MyUser.User.USER_NAME).getBytes());

out.close();

introwId=0;

UrirowUri=ContentUris.appendId(

MyUser.User.CONTENT_URI.buildUpon(),rowId).build();

getContext().getContentResolver().notifyChange(rowUri,null);

returnrowUri;

}catch(Exceptione){

returnnull;

}

}

//创建用于保存信息的文件

@Override

publicbooleanonCreate(){

try{

//每个包中应用程序的私有目录为:

/data/data/包名/

//SD卡目录为:

/sdcard

file=newFile("/data/data/com.webabcd.contentprovider/",

"demo.txt");

if(!

file.exists())

file.createNewFile();

returntrue;

}catch(Exceptionex){

returnfalse;

}

}

//ContentProvider的查询数据接口

@Override

publicCursorquery(Uriuri,String[]projection,Stringselection,

String[]selectionArgs,StringsortOrder){

Stringcontent;

try{

in=newFileInputStream(file);

intlength=(int)file.length();

byte[]buffer=newbyte[length];

in.read(buffer,0,length);

content=EncodingUtils.getString(buffer,"UTF-8");

in.close();

String[]columns=newString[]{MyUser.User._ID,MyUser.User.USER_NAME};

MatrixCursorcur=newMatrixCursor(columns);

String[]values=newString[]{"0",content};

cur.moveToFirst();

cur.addRow(values);

returncur;

}catch(Exceptione){

returnnull;

}

}

//ContentProvider的更新数据接口

@Override

publicintupdate(Uriuri,ContentValuesvalues,Stringselection,

String[]selectionArgs){

//TODOAuto-generatedmethodstub

return0;

}

}

Main.java

代码

packagecom.webabcd.contentprovider;

importjava.util.Random;

importandroid.app.Activity;

importandroid.content.ContentUris;

importandroid.content.ContentValues;

importandroid.database.Cursor;

import.Uri;

importandroid.os.Bundle;

importandroid.provider.Contacts;

importandroid.provider.Contacts.People;

importandroid.util.Log;

importandroid.view.View;

importandroid.widget.Button;

importandroid.widget.Toast;

/*

*几个常用的系统内置的ContentProvider如下:

*content:

//media/internal/images这个URI将返回设备上存储的所有图片

*content:

//contacts/people/这个URI将返回设备上的所有联系人信息

*content:

//contacts/people/45这个URI返回单个结果(联系人信息中ID为45的联系人记录)

*/

publicclassMainextendsActivity{

/**Calledwhentheactivityisfirstcreated.*/

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Buttonbtn1=(Button)this.findViewById(R.id.btn1);

btn1.setText("新增联系人记录");

btn1.setOnClickListener(newButton.OnClickListener(){

publicvoidonClick(Viewv){

Randomrandom=newRandom();

insertRecords("name"+String.valueOf(random.nextInt()),String

.valueOf(random.nextInt()));

}

});

Buttonbtn2=(Button)this.findViewById(R.id.btn2);

btn2.setText("查看联系人记录");

btn2.setOnClickListener(newButton.OnClickListener(){

publicvoidonClick(Viewv){

displayRecords();

}

});

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1