`

SQLiteOpenHelper SQLiteDatabase ContentProvider三者的关系

 
阅读更多

SQLiteOpenHelper SQLiteDatabase ContentProvider三者的关系

 

 

SQLiteOpenHelper类

 

synchronized void close()
Close any open database object.
synchronized SQLiteDatabase getReadableDatabase()
Create and/or open a database.
synchronized SQLiteDatabase getWritableDatabase()
Create and/or open a database that will be used for reading and writing.
abstract void onCreate(SQLiteDatabase db)(在派生类中必须被重写)
Called when the database is created for the first time.
void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion)
Called when the database needs to be downgraded.
void onOpen(SQLiteDatabase db)
Called when the database has been opened.
abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)(在派生类中必须被重写)
Called when the database needs to be upgraded.

 

 

它提供了两个重要的方法,分别是

onCreate(SQLiteDatabase db):用户初次使用软件时生成数据库,一旦数据库存在则不会调用此方法。函数是在第一次创建数据库的时候执行的,仅仅生成DataBaseHelper对象(SQLiteOpenHelper类型)的时候是不会调用该函数的,而只有当调用DataBaseHelper对象的getReadableDataBase时或者是调用了getWritableDataBase时,如果是第一次创建数据库,那么就一定会调用onCreate()函数。

 

onUpgrade(SQLiteDatabase db,int oldVersion,int vewVersion):用于升级软件时更新数据库表结构,如增加表、列字段等操作。

提示一下,在软件升级前,最好对原有数据进行备份,在新表建好后把数据导入新表中。

 

实现了这两个方法,就可以用它的getWritableDatabase()和getReadableDatabase()来获得数据库(SQLiteDatabase 对象)。

 

强调下:当第一次创建数据库时,当实现DataBaseHelper对象的getReadableDataBase时或者是调用了getWritableDataBase时,系统自动调用oncreater()方法(当然程序中也可以调用);

如果用户需要升级数据库表结构,需要主动调用onUpgrade(SQLiteDatabase db,int oldVersion,int vewVersion),传入一个新的版本的号。

继承该类并覆盖onCreate,onUpgrade,onOpen(可选)。我们可以创建或打开数据库,并对其进行升级。通过getReadableDataBase和getWritableDataBase获取SQliteDataBase实例。通过close关闭数据库。

    

 

SQLiteDatabase 类:

SQLiteDatabase是关于数据库操作,封装了管理数据库的各种方法,包括insert 、delete、 update 、query 、执行SQL命令等操作。

其beginTransaction(),endTransaction()方法封装了开始及停止一个事务的相关SQL命令,yieldfContended()方法将暂停当前事务的运行已让其它等待线程执行。当该方法返回时,一个未标记为成功的新事务将被创建。

setMaximunSize(long)用于设置数据库文件的最大长度。

compileStatement(String)将一个SQL命令字符串转换为SQliteStatement对象,用于后续管理或执行。query()执行指定的SQL语句进行查询,并返回cursor作为结果。get/setVersion()获取霍设置数据库版本号。

insert(),update(),delete()执行数据库记录插入、更新、删除等工作。

execSQL() 执行一条非查询类型的SQL命令,如:创建表,删除记录等。

setLocal()设置数据库的local。

 

可惜美中不足的是:

1. 其不支持创建数据库

2. 其不支持版本更新 或者说其不知道如何做 因为具体数据的差异

鉴于以上的缺陷,有一个辅助类可以完成上面功能,那就是:SQLiteOpenHelper

 

获得了SQLiteDatabase对象以后,我们就可以通过调用SQLiteDatabase的实例方法来对数据库进行操作了(通常,在ContentProvider派生类对象中,有一个SQLiteOpenHelper实例,通过SQLiteOpenHelper实例的getWritableDataBase或getReadableDataBase方法可以得到SQLiteDatabase对象实例)。

 

 

ContentProvider类

待续。。。

 

 

 

 

分享到:
评论
发表评论

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

相关推荐

    SQLiteOpenHelper和ContentProvider区别

    SQLiteOpenHelper和ContentProvider是Android开发中的两个重要组件,它们都与数据存储和访问有关,但各自扮演的角色和使用场景有所不同。 SQLiteOpenHelper是Android系统提供的一个用于管理SQLite数据库的辅助类。...

    sqlite&provider&observer

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

    Android SqliteOpenHelper数据库的基本使用

    `SQLiteOpenHelper`提供了一个`getWritableDatabase()`方法来获取可读写的`SQLiteDatabase`实例,通过这个实例执行SQL语句。例如,插入数据: ```java public boolean insertData(String name, int age) { ...

    ContentProvider实现数据库操作

    4. **增删改查操作**:在ContentProvider的insert()、update()、delete()方法中,我们将解析Uri获取需要操作的数据,然后构造相应的SQL语句,通过SQLiteDatabase对象执行。例如,insert()方法通常会调用...

    contentprovider实现数据库访问

    在Android开发中,ContentProvider是四大组件之一,它扮演着数据共享和访问的重要角色。ContentProvider使得应用程序可以将自己的数据结构化,并提供给其他应用进行安全的读写操作,包括增、删、改、查等基本功能。...

    安卓开发实验6——SQLite和SQLiteDatabase应用

    你需要继承SQLiteOpenHelper类,重写`onCreate()`和`onUpgrade()`方法。`onCreate()`用于首次创建数据库时执行的初始化操作,而`onUpgrade()`则在数据库升级时调用。 2. **创建表**:在`onCreate()`中,你可以使用...

    android 数据库 以及自定义ContentProvider demo

    在ContentProvider中,你需要根据UriMatcher匹配到相应的操作,并调用SQLiteOpenHelper的方法对数据库进行增删改查操作。比如在query()方法中,你可以这样查询数据: ```java @Override public Cursor query(Uri ...

    ContentProvider单个数据库表

    本示例着重讲解如何创建一个针对单一数据库表的ContentProvider,帮助初学者理解其工作原理和使用方法。 首先,我们要明白ContentProvider的基本结构。ContentProvider继承自android.content.ContentProvider类,...

    自定义ContentProvider完成数据交互

    在ContentProvider内部,你可以创建一个SQLiteOpenHelper子类,用于管理数据库的创建、升级以及对数据库的CRUD操作。例如: ```java private static class DatabaseHelper extends SQLiteOpenHelper { // 数据库...

    Android应用开发使用ContentProvider以及SQLite实现对数据库的相关操作

    SQLite是一个轻量级、嵌入式的关系型数据库,它是Android系统默认支持的数据库系统。ContentProvider则是Android框架提供的一种机制,用于在应用程序之间共享数据,同时也可用于管理SQLite数据库。接下来,我们将...

    contentprovider操作数据库

    2. **数据库操作**:ContentProvider通常与SQLite数据库配合使用,因此需要创建一个SQLiteOpenHelper子类来处理数据库的创建、升级以及版本管理。 3. **UriMatcher**:这是一个工具类,用于解析传入的URI,确定应该...

    android对sqlite、contentprovider的例子

    在 Android 中,我们通常通过 `SQLiteOpenHelper` 类来管理数据库的版本和生命周期,同时使用 `SQLiteDatabase` 对象执行 SQL 命令。 1. **创建数据库**:首先,你需要继承 `SQLiteOpenHelper` 类并重写 `onCreate...

    ContentProvider测试Demo

    `SQLiteOpenHelper`类用于创建和升级数据库,而`SQLiteDatabase`类提供了执行SQL语句的方法。 6. **测试ContentProvider**:在Demo中,开发者可能创建了一个测试Activity,通过`ContentResolver`发起查询、插入、...

    ContentProvider操作数据库小例子

    在Android开发中,ContentProvider是一种系统级别的服务,用于在应用程序之间共享数据。它扮演着数据桥梁的角色,使得不同应用能够安全、有效地访问彼此的数据。在这个小例子中,我们将深入理解如何利用...

    Android四种存储方式 sharedpreference,file,SQlite,contentprovider

    SQLite是Android内置的关系型数据库,适用于存储大量结构化的数据。创建数据库和表通常在SQLiteOpenHelper的子类中完成,通过`onCreate()`和`onUpgrade()`方法。例如,创建一个名为`MyDatabase`的数据库和一个`...

    ContentProvider

    private SQLiteDatabase sqLiteDatabase; private static final UriMatcher URI_MATCHER=new UriMatcher(UriMatcher.NO_MATCH); private final String TAG="provider"; private static final String authority=...

    安卓ContentProvider详解例程

    3. **SQLite数据库**:大多数情况下,ContentProvider的数据存储在SQLite数据库中,你可以通过`SQLiteOpenHelper`类来创建和管理数据库。 4. **Cursor**:ContentProvider返回的数据通常以Cursor对象的形式,它是对...

    android 通过ContentProvider实现sqlite数据库共享

    Android系统内置了SQLite库,提供了SQLiteOpenHelper类来辅助数据库的创建、升级和版本管理,以及SQLiteDatabase类用于执行SQL语句。 三、ContentProvider与SQLite结合 1. 创建数据库和表 首先,我们需要创建一个...

    Android 自定义ContentProvider简单实例

    三、ContentProvider 的使用 创建了ContentProvider 之后,我们可以使用ContentResolver 来操作数据库。 ``` ContentResolver resolver = getContentResolver(); Uri uri = Uri.parse("content://...

Global site tag (gtag.js) - Google Analytics