`
huangqinqin
  • 浏览: 360356 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

使用SQLiteOpenHelper 和使用ContentProvider。

阅读更多
  一:Android中操作数据库主要有两种方法:使用SQLiteOpenHelper 和使用ContentProvider。

(一)使用SQLiteOpenHelper:一个抽象类,用于提供管理数据库版本并维护创建数据库的接口。其子类必须实现onCreate(SQLiteDatabase)和onUpdate(SQLiteDatabase, int, int)方法,也可以实现可选方法onOpen(SQLiteDatabase)。另外,也必须重写父类的构造函数。
如果数据库存在则这个类将负责打开数据库,如果不存在则创建一个新的数据库。当Android检测到你在引用一个旧数据库(根据版本号判断)时,它将调用onUpdate()方法。
1.添加数据:
》实例化一个继承了SQLiteOpenHelper抽象类的类,(例如为events);
》获取SQLiteDatabase对象:SQLiteDatabase db = events.getWritableDatabase();
》定义ContentValues的一个对象用于存储数据:ContentValues values = new ContentValues();
》调用ContentValues的put方法装载数据;
》将数据插入数据库中:db.insertOrThrow(TABLE_NAME, null, values);
其中SQLiteOpenHelper类中的getReadableDatabase()和getWritableDatabase()及close()方法都是同步方法。
顾名思义,如果insertOrThrow()执行失败,它可以抛出一个SQLException类型的异常。无需使用一个throws关键字来声明该异常,因为它是一个RuntimeException,而不是一个检查异常。但是,如果你喜欢,仍然可以在一个try/catch块中处理它,就像处理任何其他异常一样。如果未处理它并且存在一个错误,程序将终止,并将一条回溯信息转储到Android日志中。
2.查询数据:
因为无需因查询而修改数据库,所以可以只调用getReadableDatabase()获得一个只读句柄。
》SQLiteDatabase db = events.getReadableDatabase();
》Cursor cursor = db.query(TABLE_NAME, FROM, null,null,null,null,ORDER_BY);
》startManagingCursor(cursor);
其中startManagerCursor():告诉活动应根据该活动的生命周期来管理光标的生命周期。例如:当活动被暂停时,它将自动停止用光标,然后在活动重启时重新查询该光标。当活动终止时,所有托管的光标都将关闭。
3:数据绑定
用于数据表中存在大量数据的情况下,可以提高程序的运行速度。
如果要将大量的数据显示在View中,并将这些数据追加在一个字符串中,则可能耗尽所有内存。
ListView与Adapter的结合使用。
如果数据源是在XML中定义的一个数组,则使用ArrayAdapter;如果数据源是一个来自于数据库查询的Cursor对象,则使用SimpleCursorAdapter。



<?xml version=”1.0” encoding=”utf-8”>
<LinearLayout
Xmlns:android=http://schemas.android.com/apk/res/android
Android:layout_width=”fill_parent”
Android:layout_height=”fill_parent”>
<ListView
Android:id=”@android:id/list”
Android:layout_width=”wrap_content”
Android:layout_height=”wrap_content”/>
<TextView
Android:id=”@android:id/empty”
Android:layout_width=”wrap_content”
Android:layout_heitht=”wrap_content”
Android:text=”@string/empty” />
</LinearLayout>
由于该活动扩展了ListActivity, 所以Android在布局文件中查找两个特殊ID。如果列表中有内容,那么将显示android:id/list视图,否则将显示android:id/empty视图。因此,如果列表中没有条目,也不会显示空白屏幕。

(二)使用ContentProvider
在Android安全模型中,一个应用程序编写的文件无法被其他任何应用程序所读写。每个程序都有自己的Linux用户ID和数据目录(data/data/包名),以及其受保护的内存空间。Android程序可通过下面两种方式进行彼此间的通信。
1.IPC(Inter-Process Communication,进程间通信):一个进程使用AIDL(接口定义语言)和Ibinder接口声明一个任意的API。调用该API时,将在进程间安全且有效地对参数进行编组,这项先进技术用于对后台Service线程进行远程过程调用。
2.ContentProvider:进程中系统中将它们本身注册为某些数据类型的提供者。请求信息时,Android就会通过一个固定的API调用这些进程,以它们认为合适的方式查询或修改内容。
3.URI格式:content://authority/path/id 
其中:
》content://是标准要求的前缀;
》authority是提供者的名称,建议你使用完全限定包名称,避免出现名称冲突;
》path是提供者内部的一个虚拟目录,用于标识被请求的数据类型;
》id是被请求的特定记录的主键,要请求获得具有特定类型的所有记录,可以省略此参数以及后面的斜杠。
例如:content://org.example.events/events/3
4.实现ContentProvider
ContentProvider是一个类似于Activity的高级对象,需要向系统进行声明。因此,实现ContentProvider的第一步是将其添加到AndroidManifest.xml文件中的<activity>标签之前(作为<application>的子标签)。
<provider android:name=”EventsProvider”
android:authorities=”org.example.events” />
android:name是类名,android:authorities是在内容URI中使用的字符串。
根据约定,使用MIME类型中的vnd.example而不是org.example。
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    SQLiteOpenHelper和ContentProvider区别

    NULL 博文链接:https://18767136122.iteye.com/blog/2100970

    ContentProvider与ContentResolver与SQLiteOpenHelper

    ContentProvider与ContentResolver 与 SQLiteOpenHelper http://blog.csdn.net/i_do_can/article/details/50937380 http://blog.csdn.net/i_do_can/article/details/50937380

    Android实现使用自定义ContentProvider共享生词本数据库

    (1) 使用自定义SQLiteOpenHelper来管理数据库; (2) 提交作业应列出操作数据的Uri及数据表的字段名称; (3) 提交作业应给出自定义的CP文件的核心代码。 资源中包含自定义ContentProvider的相关实现的代码(Homework...

    android应用安全——数据安全

    android中操作数据库可使用SQLiteOpenHelper或ContentProvider的方式。  数据安全包含数据库数据安全、SD卡数据(外部存储)安全、RAM数据(内部存储)安全。  android中操作数据库可使用SQLiteOpenHelper或...

    ContentProvider

    import android.content.ContentProvider; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.content.UriMatcher; import android....

    ContentProviderDemo.zip

    Android 四大件组件之一ContentProvider demo案例,下载...存储数据使用系统自带的数据库SQLIteOpenHelper,自定义ContentProvider,通过ContentResolver访问ContentProvider,实现数据新增、查找、删除、修改等功能。

    sqlite&provider&observer

    SQLiteDatabase,SQLiteOpenHelper,ContentProvider,ContentResolver,ContentObserver,ContentObserverable的使用简单使用。

    疯狂Android讲义源码

     2.1.4 使用XML布局文件和Java  代码混合控制UI界面 42  2.1.5 开发自定义View 43  2.2 布局管理器 46  2.2.1 线性布局 47  2.2.2 表格布局 49  2.2.3 帧布局 52  2.2.4 相对布局 55  2.2.5 绝对布局 58  ...

    疯狂Android讲义.part1

    2.1.4 使用XML布局文件和Java 代码混合控制UI界面 42 2.1.5 开发自定义View 43 2.2 布局管理器 46 2.2.1 线性布局 47 2.2.2 表格布局 49 2.2.3 帧布局 52 2.2.4 相对布局 55 2.2.5 绝对布局 58 2.3 基本界面组件 60 ...

    sqlite-open-helper:基于资产SQL脚本SQLiteOpenHelper

    DatabaseOpenHelper是一个SQLiteOpenHelper类,它使用 SQL 资产脚本来创建/更新 Android 数据库。 SQL 脚本必须存储在/assets/db/migrate_VERSION.sql文件中,其中VERSION是每个脚本迁移到的版本。 负责创建数据库...

    Android实例代码

    9.2、操作系统的ContentProvider:使用ContentProvider管理联系人和多媒体; 9.3、实现ContentProvider:创建ContentProvider的步骤; 9.4、监听ContentProvider的数据:ContentObserver; 第10章、Service与...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    9.2、操作系统的ContentProvider:使用ContentProvider管理联系人和多媒体; 9.3、实现ContentProvider:创建ContentProvider的步骤; 9.4、监听ContentProvider的数据:ContentObserver; 第10章、Service与...

    LoadSQLiteManager:用异步加载数据库(LoaderManager,ContentProvider,ContentResolver,SQLiteOpenHelper)

    ##LoaderManager1,可以增加删除数据,并及时刷新2,用到了内容观察者来对数据库增删改除3,LoaderManager异步加载数据(google推荐)##链接

    java投屏源码-android-contentprovider-generator:一个生成AndroidContentProviders的

    一个ContentProvider类 SQLiteOpenHelper类 每个实体一个Columns类 每个实体一个Cursor类 每个实体一个ContentValues类 每个实体一个Selection类 每个实体一个Model接口 每个实体一个Bean类(可选) 用法 有两种可能...

    安卓数据库操作案例

    android database example, such as ContentProvider, AsyncQueryHandler, SQLiteOpenHelper, etc.

    Android基础教程

    12.1.4 使用和扩展 12.1.5 运行小部件 12.1.6 最新进展 12.1.7 快乐之旅 12.2 动态壁纸 12.2.1 创建壁纸项目 12.2.2 服务简介 12.2.3 创建一个绘图引擎 12.2.4 重用OpenGL代码 12.2.5 创建和销毁引擎 12.2.6 管理...

    黎活明android教程的全程PPT

    课程安排 第一天 1&gt;搭建Android开发环境 ...2&gt; 传感器的使用和拖拉功能实现 3&gt; 软件打包与发布,生成私钥签名你的软件 4&gt; 简历介绍 第九天以后 讲解Android手机视频客户端、来电知了、新浪微博客户端等项目

    传智播客Android视频教程-课程源码.rar

    2&gt; 传感器的使用和拖拉功能实现 3&gt; 软件打包与发布,生成私钥签名你的软件 4&gt; 简历介绍 第九天以后 讲解Android手机视频客户端、来电知了、新浪微博客户端等项目 项目名称 Android手机视频客户端:本系统专为...

Global site tag (gtag.js) - Google Analytics