阅读更多

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

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必须重载并实现,

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; }}

 

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

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

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

   

这里的
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,可以根据这个参数来决定操作目标,比如数据库中的哪张表,文件中的那一部分数据等。

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

private String getName()    {     String name = null;           Cursor cur = this.getContentResolver().query(ProviderConst.MY_TEST_URI,new String[]{"id","name"},null, null, null);     if (cur == null)      return null;     cur.moveToFirst();     do     {      name = name  + cur.getString(1)+ "\n";                 } while(cur.moveToNext());                return name;    }

 

更多相关文章

  1. Android通过WebView与JS交互的全面方式
  2. 【iOS-Android开发对比】之 数据存储
  3. (一)Android数据结构学习之链表
  4. 在Android中创建和使用数据库
  5. Android中的IPC方式(二)
  6. Android之Http网络编程(三)
  7. Android中sqlite数据库的简单使用
  8. android orm映射框架 ormlite (类似于hibernate) 很强大
  9. 在Android中创建和使用数据库

随机推荐

  1. Android四款系统架构工具
  2. Android书籍分享
  3. Android中图片占用内存的计算
  4. Android中的几种网络请求方式详解
  5. android中的sqlite数据库加密
  6. Android(安卓)原生开发、H5、React-Nativ
  7. Android(安卓)ImageView 总结【转载】
  8. Android下获取Root权限和设置目录属性
  9. Android(安卓)操作SQLite数据库之一
  10. Android(安卓)UI 之 onTouchEvent, onCli