在 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
<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,可以根据这个参数来决定操作目标,比如数据库中的哪张表,文件中的那一部分数据等。
我们来操作这个内容提供者:
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; }
评论
[*]
发表评论
-
Android临时数据缓存方法
2011-07-22 22:58 1962学习Android的朋友欢迎加入:群 59324839(QQ) ... -
ContentProvider内容提供者
2011-07-22 22:58 1285学习Android的朋友欢迎加入:群 59324839(Q ... -
android网络
2011-07-22 22:57 1066学习Android的朋友欢迎加入:群 59324839(Q ... -
SQLite数据库
2011-07-22 22:55 836学习Android的朋友欢迎加入:群 59324839(QQ) ... -
Android Xml解析
2011-07-22 22:53 920学习Android的朋友欢迎加入:群 59324839(Q ... -
Android SharedPreferences
2011-07-22 22:53 1032学习Android的朋友欢迎加入:群 59324839(Q ... -
Android XMl写入
2011-07-22 22:51 1119学习Android的朋友欢迎加入:群 59324839(Q ... -
Android 权限配置
2011-07-22 22:51 1439学习Android的朋友欢迎加入:群 59324839(Q ... -
Android 文件操作
2011-07-22 22:45 883学习Android的朋友欢迎加入:群 59324839(QQ) ... -
Android Dialog的使用
2011-07-22 22:44 1019学习Android的朋友欢迎加入:群 59324839(QQ) ... -
android 技术讨论群(QQ)
2011-07-04 22:18 412android 学习群; 可供广大群从参加! 初学者欢 ... -
SQL判断一个表在系统中是否存在
2011-07-03 18:49 1568/** * 判断某张表是否存在 * @ ... -
android 对话框应用
2011-06-28 00:21 890啥都别说了,看效果吧! new AlertDialog ... -
android 权限大全
2011-06-14 00:19 874java.net.SocketException: Perm ... -
android GUI线程安全
2011-06-11 18:28 1282Activity:运行于主线程。因Android的GUI是 ... -
android Intent和菜单的使用
2011-06-11 01:55 866首先我们需要知道Intent这个东西是用来干什么的: ... -
android 下载程序
2011-06-10 00:34 1039HttpDownloader 文件: package zho ... -
android SQLite使用
2011-06-10 00:33 1411package zhou.demo.sql; impor ... -
android Handler and progress
2011-06-10 00:31 804package zhou.demo; import andr ... -
android Handler使用
2011-06-10 00:31 893package zhou.demo; import andr ...
相关推荐
Android高级编程雪梨作业之自定义ContentProvider 将任务01生词本作业中生成的生词本数据库通过自定义ContentProvider的方式,共享给其他应用。 要求如下: (1) 使用自定义SQLiteOpenHelper来管理数据库; (2) 提交...
contentprovider
1、Android Room操作SQLite数据 2、ContentProvider使用,使用Room进行数据库操作
androdi ContentProvider和Uri详解
android 自定义 ContentProvider 以及 ContentResolver
两个apk之间通过Broadcast,BroadcastReceiver广播互相通信及ContentProvider监听数据库增删改查的变换
介绍ContentProvider使用方法,包括最简单的用法,一个项目中创建多个ContentProvider分别操作数据库表,以及一个ContentProvider操作多张数据库表的用法。
contentProvider 的使用以及总结
ContentProvider自定义以及使用系统ContentProvider
该文件中有两个应用,db应用通过ContentProvider对外提供数据共享,other应用提供测试代码对数据进行增删改查。 参考博客:http://blog.csdn.net/tan313/article/details/44338425
现在请数一数你的手机中一共有多少...这个时候Contentprovider就排上用场了,Contentprovider能够在各个app之间进行数据的共享和传递,让信息不再成为孤岛,从这个意义上讲,你还能有不去学习Contentprovider的理由吗?
android 数据库 以及自定义ContentProvider demo
ContentProvider 共享SharedPreferences 值
android contentprovider使用示例
Android学习ContentProvider数据更新与Observer模式一Observer模式意图: 定义对象之间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被更新。 依赖(Dependents)、发布-...
contentProvider监听的例子
用SharePreferences作数据存储做了一个ContentProvider实现数据共享
Android知识点ContentProvider篇
AsyncQueryHandler及ContentProvider的使用,异步查询数据 显示在listview里面,及其常用的Adapter的用法,