在 Android中,对于数据的存贮,有几种方式,有文件方式,有文件式数据库方式,网络数据,Android自带了一个SQLite数据库,做嵌入开发的人对这个跨平台的本地文件数据库一定不会陌生,在Android对于数据的访问,提出了新的方式,ContentProvider方式,我们首先来看看SQLite在 Android中的使用,在Android中有最简单的使用方式,就是利Context对象的openorCreateDatabase
我们来看看一段代码:

Java代码
  1. importandroid.app.Activity;
  2. importandroid.content.Intent;
  3. importandroid.database.Cursor;
  4. importandroid.database.sqlite.SQLiteDatabase;
  5. importandroid.os.Bundle;
  6. importandroid.view.Menu;
  7. importandroid.view.MenuItem;
  8. importandroid.widget.TextView;
  9. publicclassDBActivityextendsActivity{
  10. privateSQLiteDatabasemdb=null;
  11. /**Calledwhentheactivityisfirstcreated.*/
  12. @Override
  13. publicvoidonCreate(BundlesavedInstanceState){
  14. super.onCreate(savedInstanceState);
  15. initDatabase();
  16. setContentView(R.layout.main);
  17. }
  18. @Override
  19. publicbooleanonCreateOptionsMenu(Menumenu){
  20. //TODOAuto-generatedmethodstub
  21. super.onCreateOptionsMenu(menu);
  22. menu.add(1,Menu.FIRST+1,1,"GetName");
  23. menu.add(1,Menu.FIRST+2,2,"Test");
  24. returntrue;
  25. }
  26. publicbooleanonOptionsItemSelected(MenuItemitem){
  27. //TODOAuto-generatedmethodstub
  28. super.onOptionsItemSelected(item);
  29. switch(item.getItemId())
  30. {
  31. caseMenu.FIRST+1:
  32. {
  33. TextViewtv=(TextView)this.findViewById(R.id.view_main);
  34. tv.setText(this.getName());
  35. break;
  36. }
  37. caseMenu.FIRST+2:
  38. {
  39. this.setTitle("DelItem...");
  40. break;
  41. }
  42. }
  43. returntrue;
  44. }
  45. privatevoidinitDatabase()
  46. {
  47. mdb=this.openOrCreateDatabase("dbfile",0,null);
  48. Stringsql_create="createtabletest(idint,nameTEXT)";
  49. mdb.execSQL(sql_create);
  50. Stringsql_insert="insertintotest(id,name)values(3,'name3')";
  51. mdb.execSQL(sql_insert);
  52. }
  53. privateStringgetName()
  54. {
  55. Stringname=null;
  56. Cursorcur=mdb.rawQuery("select*fromtest",null);
  57. cur.moveToFirst();
  58. while(!cur.isLast())
  59. {
  60. name=name+cur.getString(1)+"\r\n";
  61. cur.moveToNext();
  62. }
  63. returnname;
  64. }
  65. }
import android.app.Activity;import android.content.Intent;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.TextView;public class DBActivity extends Activity { private SQLiteDatabase mdb = null;    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        initDatabase();        setContentView(R.layout.main);            }    @Override public boolean onCreateOptionsMenu(Menu menu) {  // TODO Auto-generated method stub  super.onCreateOptionsMenu(menu);     menu.add(1, Menu.FIRST +1, 1, "GetName");    menu.add(1, Menu.FIRST +2, 2, "Test");     return true;   }        public boolean onOptionsItemSelected(MenuItem item) {  // TODO Auto-generated method stub  super.onOptionsItemSelected(item);  switch (item.getItemId())  {   case Menu.FIRST+ 1:   {    TextView tv = (TextView)this.findViewById(R.id.view_main);    tv.setText(this.getName());    break;   }   case Menu.FIRST + 2:   {    this.setTitle("Del Item...");    break;   }     }  return true; }        private void initDatabase()    {     mdb = this.openOrCreateDatabase("dbfile", 0, null);     String sql_create = "create table test (id int, name TEXT)";     mdb.execSQL(sql_create);     String sql_insert = "insert into test(id, name) values(3, 'name3')";     mdb.execSQL(sql_insert);    }    private String getName()    {     String name = null;          Cursor cur = mdb.rawQuery("select * from test", null);     cur.moveToFirst();     while (!cur.isLast())     {      name = name  + cur.getString(1)+ "\r\n";      cur.moveToNext();     }     return name;    }}

我们再来看看单独使用SQLiteOpenHelper方式:
先由SQLiteOpenHelper继承一个数据库操作类,其中onCreate, onUpgrade必须重载并实现,

Java代码
  1. importandroid.content.Context;
  2. importandroid.database.Cursor;
  3. importandroid.database.sqlite.SQLiteDatabase;
  4. importandroid.database.sqlite.SQLiteOpenHelper;
  5. publicclassDatabaseHelperextendsSQLiteOpenHelper{
  6. @Override
  7. publicvoidonCreate(SQLiteDatabasedb){
  8. //TODOAuto-generatedmethodstub
  9. }
  10. @Override
  11. publicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){
  12. //TODOAuto-generatedmethodstub
  13. }
  14. publicDatabaseHelper(Contextct,StringdbName)
  15. {
  16. super(ct,dbName,null,1);
  17. }
  18. publicbooleaninsert(Stringinsert)
  19. {
  20. this.getWritableDatabase().execSQL(insert);
  21. returntrue;
  22. }
  23. publicbooleanupdate(Stringupdate)
  24. {
  25. this.getWritableDatabase().execSQL(update);
  26. returntrue;
  27. }
  28. publicbooleandelete(Stringdel)
  29. {
  30. this.getWritableDatabase().execSQL(del);
  31. returntrue;
  32. }
  33. publicCursorquery(Stringquery)
  34. {
  35. Cursorcur=this.getReadableDatabase().rawQuery(query,null);
  36. returncur;
  37. }
  38. }
import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class DatabaseHelper extends SQLiteOpenHelper { @Override public void onCreate(SQLiteDatabase db) {  // TODO Auto-generated method stub   } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  // TODO Auto-generated method stub   } public DatabaseHelper(Context ct,String dbName) {   super(ct,dbName,null,1);   }  public boolean insert(String insert) {  this.getWritableDatabase().execSQL(insert);  return true; } public boolean update(String update) {  this.getWritableDatabase().execSQL(update);  return true; } public boolean delete(String del) {  this.getWritableDatabase().execSQL(del);  return true; } public Cursor query(String query) {  Cursor cur = this.getReadableDatabase().rawQuery(query, null);  return cur; }}

再创建一个使用者(消费者)

Java代码
  1. importandroid.app.Activity;
  2. importandroid.content.Intent;
  3. importandroid.database.Cursor;
  4. importandroid.database.sqlite.SQLiteDatabase;
  5. importandroid.os.Bundle;
  6. importandroid.view.Menu;
  7. importandroid.view.MenuItem;
  8. importandroid.widget.TextView;
  9. publicclassDBActivityextendsActivity{
  10. privateSQLiteDatabasemdb=null;
  11. privateDatabaseHelperhelper=null;
  12. /**Calledwhentheactivityisfirstcreated.*/
  13. @Override
  14. publicvoidonCreate(BundlesavedInstanceState){
  15. super.onCreate(savedInstanceState);
  16. initDatabase();
  17. setContentView(R.layout.main);
  18. }
  19. @Override
  20. publicbooleanonCreateOptionsMenu(Menumenu){
  21. //TODOAuto-generatedmethodstub
  22. super.onCreateOptionsMenu(menu);
  23. menu.add(1,Menu.FIRST+1,1,"GetName");
  24. menu.add(1,Menu.FIRST+2,2,"Test");
  25. returntrue;
  26. }
  27. publicbooleanonOptionsItemSelected(MenuItemitem){
  28. //TODOAuto-generatedmethodstub
  29. super.onOptionsItemSelected(item);
  30. switch(item.getItemId())
  31. {
  32. caseMenu.FIRST+1:
  33. {
  34. TextViewtv=(TextView)this.findViewById(R.id.view_main);
  35. tv.setText(this.getName());
  36. break;
  37. }
  38. caseMenu.FIRST+2:
  39. {
  40. this.setTitle("DelItem...");
  41. break;
  42. }
  43. }
  44. returntrue;
  45. }
  46. privatevoidinitDatabase()
  47. {
  48. helper=newDatabaseHelper(this,"dbfile");
  49. //mdb=this.openOrCreateDatabase("dbfile",0,null);
  50. //Stringsql_create="createtabletest(idint,nameTEXT)";
  51. //mdb.execSQL(sql_create);
  52. Stringsql_insert="insertintotest(id,name)values(55,'namexx')";
  53. //mdb.execSQL(sql_insert);
  54. helper.insert(sql_insert);
  55. }
  56. privateStringgetName()
  57. {
  58. Stringname=null;
  59. //mdb=helper.getReadableDatabase();
  60. Cursorcur=helper.query("select*fromtest");
  61. cur.moveToFirst();
  62. do
  63. {
  64. name=name+cur.getString(1)+"\n";
  65. }while(cur.moveToNext());
  66. returnname;
  67. }
  68. }
import android.app.Activity;import android.content.Intent;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.widget.TextView;public class DBActivity extends Activity { private SQLiteDatabase mdb = null; private DatabaseHelper helper = null;    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        initDatabase();        setContentView(R.layout.main);            }    @Override public boolean onCreateOptionsMenu(Menu menu) {  // TODO Auto-generated method stub  super.onCreateOptionsMenu(menu);     menu.add(1, Menu.FIRST +1, 1, "GetName");    menu.add(1, Menu.FIRST +2, 2, "Test");     return true;   }        public boolean onOptionsItemSelected(MenuItem item) {  // TODO Auto-generated method stub  super.onOptionsItemSelected(item);  switch (item.getItemId())  {   case Menu.FIRST+ 1:   {    TextView tv = (TextView)this.findViewById(R.id.view_main);    tv.setText(this.getName());    break;   }   case Menu.FIRST + 2:   {    this.setTitle("Del Item...");    break;   }     }  return true; }        private void initDatabase()    {     helper = new DatabaseHelper(this,"dbfile");     //mdb = this.openOrCreateDatabase("dbfile", 0, null);     //String sql_create = "create table test (id int, name TEXT)";     //mdb.execSQL(sql_create);     String sql_insert = "insert into test(id, name) values(55, 'namexx')";     //mdb.execSQL(sql_insert);     helper.insert(sql_insert);    }    private String getName()    {     String name = null;       //mdb = helper.getReadableDatabase();     Cursor cur = helper.query("select * from test");     cur.moveToFirst();     do     {      name = name  + cur.getString(1)+ "\n";                 } while(cur.moveToNext());                return name;    }}

在来看看使用ContentProvider

Java代码
  1. importandroid.content.ContentProvider;
  2. importandroid.content.ContentValues;
  3. importandroid.database.Cursor;
  4. importandroid.net.Uri;
  5. importandroid.widget.Toast;
  6. publicclassTestProviderextendsContentProvider{
  7. privateDatabaseHelpermdbHelper=null;
  8. finalstaticStringTABLE_NAME="test";
  9. @Override
  10. publicintdelete(Uriarg0,Stringarg1,String[]arg2){
  11. mdbHelper.getWritableDatabase().delete(TABLE_NAME,arg1,arg2);
  12. return0;
  13. }
  14. @Override
  15. publicStringgetType(Uriuri){
  16. //TODOAuto-generatedmethodstub
  17. returnnull;
  18. }
  19. @Override
  20. publicUriinsert(Uriuri,ContentValuesvalues){
  21. //TODOAuto-generatedmethodstub
  22. mdbHelper.getWritableDatabase().insert(TABLE_NAME,"",values);
  23. returnnull;
  24. }
  25. @Override
  26. publicbooleanonCreate(){
  27. //TODOAuto-generatedmethodstub
  28. mdbHelper=newDatabaseHelper(this.getContext(),"dbfile");
  29. returntrue;
  30. }
  31. @Override
  32. publicCursorquery(Uriuri,String[]projection,Stringselection,
  33. String[]selectionArgs,StringsortOrder){
  34. Cursorcur=mdbHelper.getReadableDatabase().query(TABLE_NAME,projection,selection,null,null,null,null);
  35. Toast.makeText(this.getContext(),"testCur!",Toast.LENGTH_SHORT);
  36. returncur;
  37. }
  38. @Override
  39. publicintupdate(Uriuri,ContentValuesvalues,Stringselection,
  40. String[]selectionArgs){
  41. mdbHelper.getWritableDatabase().update(TABLE_NAME,values,selection,null);
  42. return0;
  43. }
  44. }
import android.content.ContentProvider;import android.content.ContentValues;import android.database.Cursor;import android.net.Uri;import android.widget.Toast;public class TestProvider extends ContentProvider {    private DatabaseHelper mdbHelper = null;    final static String TABLE_NAME = "test"; @Override public int delete(Uri arg0, String arg1, String[] arg2) {  mdbHelper.getWritableDatabase().delete(TABLE_NAME, arg1, arg2);  return 0; } @Override public String getType(Uri uri) {  // TODO Auto-generated method stub  return null; } @Override public Uri insert(Uri uri, ContentValues values) {  // TODO Auto-generated method stub  mdbHelper.getWritableDatabase().insert(TABLE_NAME, "", values);  return null; } @Override public boolean onCreate() {  // TODO Auto-generated method stub  mdbHelper = new DatabaseHelper(this.getContext(), "dbfile");  return true; } @Override public Cursor query(Uri uri, String[] projection, String selection,   String[] selectionArgs, String sortOrder) {  Cursor cur = mdbHelper.getReadableDatabase().query(TABLE_NAME,projection,selection,null,null,null, null);  Toast.makeText(this.getContext(), "test Cur!", Toast.LENGTH_SHORT);  return cur; } @Override public int update(Uri uri, ContentValues values, String selection,   String[] selectionArgs) {  mdbHelper.getWritableDatabase().update(TABLE_NAME, values, selection, null);  return 0; }}

老规矩,AndroidManifest.xml来定义这个Provider
<provider android:label="test_provider" android:authorities="com.my.provider" android:name="TestProvider">
</provider>
这里的
android:authorities = "com.my.provider"是标识这个ContentProvider,调用者可以根据这个标识来找到它,
我们组合一个能找到它的Uri,
public class ProviderConst {
public static final Uri MY_TEST_URI = Uri.parse("content://com.my.provider/test");

}

content 指的是内容提供者ContentProvider。
//com.my.provider映射到我们已定义的那个ContentProvider标识
/test这个作为一个参数,传给ContentProvider,可以根据这个参数来决定操作目标,比如数据库中的哪张表,文件中的那一部分数据等。

我们来操作这个内容提供者:

Java代码
  1. privateStringgetName()
  2. {
  3. Stringname=null;
  4. Cursorcur=this.getContentResolver().query(ProviderConst.MY_TEST_URI,newString[]{"id","name"},null,null,null);
  5. if(cur==null)
  6. returnnull;
  7. cur.moveToFirst();
  8. do
  9. {
  10. name=name+cur.getString(1)+"\n";
  11. }while(cur.moveToNext());
  12. returnname;
  13. }

更多相关文章

  1. 守护进程通信之Socket
  2. Android有用代码片断(六)
  3. 深入解读Linux与Android的相互关系
  4. Android中JNI的使用
  5. 爱Android更要懂Android
  6. 安卓隐藏标题栏状态栏 ,实现全屏效果
  7. Android(安卓)Activity 常用功能设置(全屏、横竖屏等)
  8. Android(安卓)SDK各版本源码
  9. android定位个人当前位置

随机推荐

  1. android自定义View绘制几何图形
  2. 123123
  3. android定位服务:查看位置源及其属性
  4. Caused by: java.lang.IllegalStateExcep
  5. 读取seekbar的值
  6. Errors during Android(安卓)Kernel buil
  7. Android(安卓)vibrate+ 振动
  8. 圆角ImageView的几种实现方法
  9. Android(安卓)RecyclerView设置分割线
  10. android app develop utils