一: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是Android开发中的两个重要组件,它们都与数据存储和访问有关,但各自扮演的角色和使用场景有所不同。 SQLiteOpenHelper是Android系统提供的一个用于管理SQLite数据库的辅助类。...
本教程将深入讲解ContentProvider的使用方法,包括基础操作、多ContentProvider管理和多表操作。 首先,基础的ContentProvider用法涉及以下几个步骤: 1. **定义Uri匹配规则**:ContentProvider通过Uri(统一资源...
ContentProvider与ContentResolver 与 SQLiteOpenHelper http://blog.csdn.net/i_do_can/article/details/50937380 http://blog.csdn.net/i_do_can/article/details/50937380
(1) 使用自定义SQLiteOpenHelper来管理数据库; (2) 提交作业应列出操作数据的Uri及数据表的字段名称; (3) 提交作业应给出自定义的CP文件的核心代码。 资源中包含自定义ContentProvider的相关实现的代码(Homework...
2. 创建一个SQLite数据库,使用`SQLiteOpenHelper`来管理数据库的版本和升级。 3. 在ContentProvider类中实现对数据库的操作,比如`UserContentProvider`。 4. 在`AndroidManifest.xml`中注册ContentProvider。 5. ...
如果ContentProvider与SQLite数据库交互,你需要创建一个SQLiteOpenHelper子类来处理数据库的创建和升级。在`onCreate()`和`onUpgrade()`方法中定义表结构和升级逻辑。 5. **权限管理** 自定义ContentProvider...
1. **SQLite数据库**:通常,ContentProvider会与SQLite数据库配合使用,通过`SQLiteOpenHelper`类来创建和升级数据库。在ContentProvider中,可以创建`SQLiteOpenHelper`的实例,使用其提供的方法来操作数据库。 2....
接下来,我们将深入探讨如何使用ContentProvider和SQLite在Android应用中执行数据库操作。 首先,SQLite在Android中的应用非常广泛。每个Android应用程序可以拥有一个或多个SQLite数据库,这些数据库存储在应用程序...
在实际项目中,为了实现数据的共享和跨应用访问,通常会结合`ContentProvider`来使用`SQLiteOpenHelper`。`ContentProvider`是Android系统提供的一个接口,它可以使得其他应用能够安全地访问数据。你需要在`...
在Android系统中,ContentProvider是实现数据共享和跨应用数据访问的重要组件。它遵循统一的URI(Uniform Resource Identifier)机制,使得不同的应用可以方便地读取和修改存储在ContentProvider中的数据。本教程将...
开发者可以创建一个SQLiteOpenHelper子类,管理数据库的版本和表结构,然后在ContentProvider中使用这个助手类进行数据的CRUD操作。 六、ContentProvider源码分析 ContentProvider的源码中,`onCreate()`方法是在...
此外,还可以使用ContentProvider和CursorLoader来更好地管理和访问数据库,提高应用的性能和用户体验。 在"AntTest"这个压缩包文件中,可能包含了这个示例项目的源代码和相关的测试用例。通过查看和运行这些代码,...
本示例将深入讲解如何创建和使用ContentProvider。 首先,我们来理解ContentProvider的基本概念。ContentProvider是Android提供的一种标准化的数据访问接口,它可以封装各种类型的数据,如SQLite数据库、文件系统、...
你需要在`AndroidManifest.xml`文件中注册ContentProvider,并使用`<data>`标签定义Uri匹配规则,以便系统能正确解析和路由请求。 3. **提供数据模型**:ContentProvider需要管理的数据通常存储在SQLite数据库、...
使用SQLiteOpenHelper的`getWritableDatabase()`或`getReadableDatabase()`获取数据库实例后,我们可以调用`rawQuery()`、`insert()`、`update()`和`delete()`方法进行数据库操作。 三、自定义组件显示数据 3.1 ...
通过分析和学习这个“ContentProvider完整例子”,你可以了解到如何构建和使用ContentProvider,这对于实现跨应用的数据共享至关重要。同时,这也是一种提升应用可扩展性和模块化的好方式,因为数据的存储和访问被...
4. **处理数据存储**: 通常,ContentProvider会与SQLite数据库配合使用,因此你需要创建一个SQLiteOpenHelper子类,用于创建和升级数据库。在ContentProvider的`query()`等方法中,使用SQLiteOpenHelper来执行SQL...
在Android开发中,ContentProvider是四大组件之一,它扮演着数据共享和访问...在实际的"ContentProvider项目"中,我们可以通过创建和使用ContentProvider,实现Person数据的管理和共享,提高应用程序的扩展性和安全性。
在Android中,通常会创建一个SQLiteOpenHelper的子类,如`MyDatabaseHelper`,并在其中重写`onCreate()`和`onUpgrade()`方法,用于初始化数据库和更新数据库版本。 ```java public class MyDatabaseHelper extends ...
- 使用`ContentProvider` 和`SQLite`,开发者可以构建一个可扩展且易于维护的系统,用于跨应用共享酒店数据。 总结来说,`ContentProvider+SQLite` 的结合使得Android应用能够安全地共享数据,同时利用面向对象...