Android中文API(139) —— SQLiteOpenHelper

简介:

前言

  本章内容android.database.sqlite.SQLiteOpenHelper章节,版本为Android 4.0 r1,翻译来自:"StreamH",欢迎访问他的博客:"http://blog.csdn.net/qs_csu",再次感谢"StreamH" !期待你一起参与翻译Android的相关资料,联系我over140@gmail.com。

 

声明

  欢迎转载,但请保留文章原始出处:) 

    博客园:http://www.cnblogs.com/

Android中文翻译组: http://androidbox.sinaapp.com/

 

 

SQLiteOpenHelper

译者署名:StreamH

译者链接:http://blog.csdn.net/qs_csu

版本:Android 4.0 r1

 

结构

继承关系

public abstract class SQLiteOpenHelper extends Object

      

java.lang.Object

android.database.sqlite.SQLiteOpenHelper

 

类概述

一个帮助类,帮助创建数据库和数据库版本管理。

使用必须创建一个子类来实现其onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int)方法,同时任意实现onOpen(SQLiteDatabase)方法,同时打开数据库操作必须保证数据库存在,如果不存在则创建它,并且对其必要的升级,维护其保持一个最佳的状态。

使用本类提供内容开始创建数据库是非常容易的,首先必须对数据库进行升级,以避免在数据库启动后长期使用而阻塞数据。

举个例子,在NotePad的例子程序中参看类NotePadProvider,在SDK的目录samples/下面。

注意这个类假定升级的版本号是单调递增的。

 

构造函数

       public SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version)

       创建一个帮助对象,打开或者管理数据库。该方法通常快速返回。数据库并没有实际创建或打开,直到getWritableDatabase() getReadableDatabase()其中一个被调用。

              参数

                     context 用来打开或创建数据库

                     name    数据库文件名,对一个在内存中的数据库而言是null

                     factory    用来创建对象游标,或者默认为null

                     version    数据库的序号(1开始);如果数据库是旧的,onUpgrade(SQLiteDataBaseintint)会被调用去升级数据库;如果数据库是新的,onDowngrade(SQLiteDatabaseintint)会被调用去降级数据库。

 

       public SQLiteOpenHelper (Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler)

       创建一个帮助对象,打开或者管理数据库。该方法通常快速返回。数据库并没有实际创建或打开,直到getWritableDatabase() getReadableDatabase()其中一个被调用。

参数

context 用来打开或创建数据库

                     name   数据库文件名,对一个在内存中的数据库而言是null

                     factory    用来创建对象游标,或者默认为null

                     version    数据库的序号(1开始);如果数据库是旧的,onUpgrade(SQLiteDataBaseintint)会被调用去升级数据库;如果数据库是新的,onDowngrade(SQLiteDatabaseintint)会被调用去降级数据库。

                    errorHandler sqlite报告一个数据库毁坏错误时,DatabaseErrorHandler会被使用。

 

公共方法

       public synchronized void close ()

       关闭任何打开的数据库对象。

 

       public String getDatabaseName ()

       返回正被打开的通过构造函数传递进来的SQLite数据库的名字。

 

       public synchronized SQLiteDatabase getReadableDatabase ()

创建或打开一个数据库。这和getWritableDatabase()返回的对象是同一个,除非一些因素要求数据库只能以read-only的方式被打开,比如磁盘满了。在这种情况下,一个只读的数据库对象将被返回。如果这个问题被修改掉,将来调用getWritableDatabase()就可能成功,而这时read-only数据库对象将被关闭,并且读写对象将被返回。

getWritableDatabase(),这个方法需要很长时间才返回,所以你不该在应用程序的主线程中调用它,包括方法ContentProvider.onCreate()

返回值

       一个有效的数据库对象,直到getWritableDatabase() or close() 被调用

异常

       SQLiteException    如果数据库不能被打开

 

public synchronized SQLiteDatabase getWritableDatabase ()

创建或打开一个数据库,用于读写。该方法第一次被调用的时候,数据库被打开,并且onCreate(SQLiteDatabase)onUpgrade(SQLiteDatabaseintint)onOpen(SQLiteDatabase)将被调用。

一旦成功打开,数据库将被缓存,所以需要写入数据的时候你可以调用这个方法。(当你不再需要这个数据库的时候,确保调用close())。像不健康的许可或磁盘已满等错误都可能导致该方法是不,但是如果该问题被解决,将来的尝试可能会成功。

数据库升级可能会话费很长的时间,所以你不该在应用程序的主线程中调用它,包括方法ContentProvider.onCreate()

返回值

              一个有效的读写数据库对象直到close()被调用。

       异常

              SQLiteException    如果数据库不能被打开用于写入

      

       public abstract void onCreate (SQLiteDatabase db)

       当第一次创建数据库时调用。表格的创建和初始化表格的个数在这里完成。

              参数

                     db    数据库

 

       public void onDowngrade (SQLiteDatabase db, int oldVersion, int newVersion)

       当数据库需要降低版本时候调用。这个方法跟onUpgrade()很相似,但是只要当然版本比被请求的更新,它就会被调用。尽管如此,这个方法不是抽象的,所以它并不强制用户去实现它。如果不被重写,默认的实现将会拒绝降级并且抛出一个SQLiteException

              参数

                     db                         数据库

oldVersionThe       旧版本数据库

newVersionThe      新版本数据库

 

       public void onOpen (SQLiteDatabase db)

       当数据库打开时调用。这个实现会在升级数据库之前会检查isReadOnly()

        参数

                     db                         数据库

 

       public abstract void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion)

当数据库升级时调用。这个实现需要使用该方法去丢弃表格,增加表格,或者做一些其它事情,它需要升级到新的计划中的版本。

SQLite ALTER TABLE文档可以在这找到。如果你添加新的列,你可以使用ALTER TABLE 去把它们插入到活着的表格中。如果你重命名或移动列,你可以使用ALTER TABLE去重命名这些旧的表格,然后创建新的表格,之后把旧表格的数据放到新的表格上。

              参数

                     db                         数据库

oldVersionThe       旧版本数据库

newVersionThe      新版本数据库


转载:http://www.cnblogs.com/over140/archive/2011/11/30/2268591.html

目录
相关文章
|
5月前
|
Android开发
Android 11 修改libcore update-api 遇到的问题
Android 11 修改libcore update-api 遇到的问题
135 1
|
定位技术 API 开发工具
Android 按照步骤接入百度地图API,定位显示不了解决办法
Android 按照步骤接入百度地图API,定位显示不了解决办法
350 1
|
2月前
|
编译器 API Android开发
Android经典实战之Kotlin Multiplatform 中,如何处理不同平台的 API 调用
本文介绍Kotlin Multiplatform (KMP) 中使用 `expect` 和 `actual` 关键字处理多平台API调用的方法。通过共通代码集定义预期API,各平台提供具体实现,编译器确保正确匹配,支持依赖注入、枚举类处理等,实现跨平台代码重用与原生性能。附带示例展示如何定义跨平台函数与类。
70 0
|
4月前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
49 2
|
4月前
|
Java Linux API
微信API:探究Android平台下Hook技术的比较与应用场景分析
微信API:探究Android平台下Hook技术的比较与应用场景分析
|
5月前
|
SQL API Android开发
Android API:Activity.managedQuery()
Android API:Activity.managedQuery()
38 2
|
5月前
|
API 定位技术 开发工具
Android Studio2021.1.1 高德地图api调用这一篇就够了
Android Studio2021.1.1 高德地图api调用这一篇就够了
|
5月前
|
API Android开发
Android Framework增加API 报错 Missing nullability on parameter
Android Framework增加API 报错 Missing nullability on parameter
270 1
|
5月前
|
API Android开发
对于应用研发平台EMAS中安卓 API 32 收不到 FCM 推送的问题
对于应用研发平台EMAS中安卓 API 32 收不到 FCM 推送的问题
101 3
|
API Android开发
mPaaS(移动跨平台框架)目前已经支持了Android API级别21
mPaaS(移动跨平台框架)目前已经支持了Android API级别21
136 2
下一篇
无影云桌面