SQLite 创建与打开
来源:互联网 发布:智慧树网络课 编辑:程序博客网 时间:2024/06/07 07:51
在Android中我们通过SQLiteDatabase这个类的对象操作SQLite数据库。由于SQLite数据库并不需要像C/S数据库那样建立连接以及身份验证的特性以及SQLite数据库单文件数据库的特性使得获得SQLiteDatabase对象就像获得操作文件的对象那样简单。 要创建或打开一个SQLite数据库可以直接调用SQLiteDatabase的静态方法SQLite-Database openDatabaseString pathSQLiteDatabase.CursorFactory factoryintflags来打开文件系统中位于绝对路径path的数据库。可以给出一个CursorFactory对象factory用于查询时构造Cursor的子类对象并返回或者传入null使用默认的factory构造。参数flags用于控制打开或创建的模式多个模式组合用隔开flags可用的值均为SQLiteDatabase类中定义的整型常量。 OPEN_READONLY以只读的方式打开数据库。 OPEN_READWRITE以可读写的方式打开数据库。 CREATE_IF_NECESSARY当数据库不存在时创建数据库。 NO_LOCALIZED_COLLATORS打开数据库时不根据本地化语言对数据进行排序。另外还可以调用方法SQLiteDatabase openOrCreateDatabaseString pathSQLite-Database.CursorFactory factory等同于调用openDatabasepathfactoryCREATE_IF_NECESSARY。因为创建SQLite数据库也就是在文件系统中创建一个SQLite数据库的文件所以应用程序必须对创建数据库的目录必须有可写的权限否则会抛出SQLite-Exception异常。 与创建或打开文件相似我们同样可以通过Context对象调用SQLiteDatabase openOr-CreateDatabaseString nameint modeSQLiteDatabase.CursorFactory factory直接在私有数据库目录/data/data/包名/databases/目录中创建或打开一个名为name的数据库。需要注意的是这里的mode并不是传入SQLiteDatabase类中的几个整型常量而是传入之前9.1节介绍过的Context类中的几个控制权限的常量MODE_PRIVATE、MODE_WORLD_ READABLE和MODE_WORLD_WRITEABLE。另外还可以通过调用databaseList方法获得由私有数据库目录内所有数据库文件的文件名组成的字符串数组调用deleteDatabaseString name方法删除私有数据库目录内文件名为name的数据库文件。 除了在文件系统中创建SQLite数据库Android还支持SQLite内存数据库。在某些需要临时创建数据库并且对操作速率相对要求较高的情况下SQLite内存数据库就发挥作用了。要在内存中创建一个SQLite数据库只需要调用SQLiteDatabase的静态方法SQLiteDatabase createSQLiteDatabase.CursorFactory factory就可以了。若创建成功会返回创建的SQLite内存数据库的对象否则会返回null。 最后请读者记住不管用何种方式打开了数据库获得的SQLiteDatabase对象不再使用时如程序退出时都要调用close方法来关闭打开的数据库否则会抛出IllegalState-Exception异常。下面这个例子完整地展示了在应用程序的私有数据库目录创建SQLite数据库并在应用程序退出时关闭并删除数据库。 1 package com.studio.android.chp9.ex223 import android.app.Activity4 import android.database.sqlite.SQLiteDatabase5 import android.os.Bundle6 import android.util.Log78 public class SQLite1 extends Activity910 final StringTAGSQLite111 final StringDB_NAMEtest.db1213 SQLiteDatabase test14 String amount15Override16 public void onCreateBundle savedInstanceState17 super.onCreatesavedInstanceState18 setContentViewR.layout.main19amountString.valueOfdatabaseList.length20 Log.dTAGbeforeamount21testopenOrCreateDatabaseDB_NAMEMODE_PRIVATEnull22amountString.valueOfdatabaseList.length23 Log.dTAGbeforeamount242526Override27 public void onDestroy28 test.close29 deleteDatabaseDB_NAME30amountString.valueOfdatabaseList.length31 Log.dTAGbeforeamount32 super.onDestroy3334首先定义了两个静态字符串常量分别用来作为Log信息的tag和数据库文件的文件名。 然后在onCreate回调方法中把私有数据库目录内的文件数量打印到Logcat上创建数据库后再次获取数据库文件数量并打印到Logcat上。当程序退出时onDestroy回调方法被执行首先关闭打开的数据库对象然后删除在程序一开始创建的数据库再把此时的数据库文件数量打印到Logcat上。整个程序从运行到关闭打印在Logcat上的信息过滤后如图9-3所示。 点击查看大图图9-3查看关于SQLite的日志信息
在实际的应用程序编写中为了更好地对SQLite数据库的创建、打开以及更改进行管理往往会编写一个继承自SQLiteOpenHelper的数据库辅助类来帮助我们创建和打开数据库。下面代码是一个数据库辅助类的骨架。 1 package com.studio.android.chp9.ex323 import android.content.Context4 import android.database.sqlite.SQLiteDatabase5 import android.database.sqlite.SQLiteOpenHelper6 import android.database.sqlite.SQLiteDatabase.CursorFactory78 public class MyHelper extends SQLiteOpenHelper9 public MyHelperContext contextString name10 CursorFactory factoryint version11 supercontextnamefactoryversion121314Override15 public void onCreateSQLiteDatabase db16//TODO创建数据库后对数据库的操作。171819Override20 public void onUpgradeSQLiteDatabase db21 int oldVersionint newVersion22//TODO更改数据库版本的操作232425由于SQLiteOpenHelper采用Context里面的方法来创建、打开私有数据库目录下的数据库所以首先在构造方法中传入contextname和factory。若name传入null则代表创建一个SQLite内存数据库version是数据库更改的版本号必须为非负数。onCreate方法会在数据库第一次被创建后执行所以通常会在此方法中执行一些诸如创建表的数据库初始化操作。当数据库本身需要更改时即传入的version不等于当前版本号时就会调用onUpgrade方法因此会在此方法中执行增加/删除表或者表中的列等操作。另外除了必须要实现onCreate和onUpgrade方法以外还可以实现onOpen这个方法。onOpen方法会在每次成功打开数据库后首先被执行默认情况下此方法的实现为空。 每次在程序中需要获得某个数据库的实例对象时我们只需要先用这个数据库的文件名构造这样的一个数据库辅助对象然后调用这个数据库辅助对象的getWritableDatabase或getReadableDatabase方法就可以获得这个数据库的SQLiteDatabase对象。下面是getWritableDatabase和getReadableDatabase这两个方法的详细介绍。 getWritableDatabase。以可读写的方式创建/打开一个SQLite数据库并返回SQLite-Database对象。若之前已经以可读写的方式打开过并且没有用close方法关闭就会直接把之前打开的SQLiteDatabase对象返回。否则会抛出SQLiteException异常。 getReadableDatabase。创建/打开一个SQLite数据库但并不一定只返回只读的SQLiteDatabase对象。正常情况下会返回与getWritableDatabase方法返回的相同的SQLiteDatabase对象。若出现磁盘已满或数据库只能以只读的方式打开等情况则会返回一个只读的SQLiteDatabase对象。但若随后再次调用此方法时问题已经被解决只读的SQLiteDatabase对象会被关闭而重新返回一个可读写的SQLiteDatabase数据库对象。若失败会抛出SQLiteException异常。 MSN空间完美搬家到新浪博客
- SQLite 创建与打开
- 三、创建与打开sqlite数据库
- Android SQLiteOpenHelper Sqlite数据库的创建与打开
- sql/sqlite/sqlite3 创建和打开数据库
- 打开、关闭、创建 数据库 -sqlite 基础教程(4)
- 打开、关闭、创建 数据库 -sqlite 基础教程(4)
- SQLite学习笔记二《打开或创建一个数据库》
- 打开、关闭、创建 数据库 -sqlite 基础教程(4)
- CreateFile() -- 打开与创建文件
- android sqlite 的创建与使用,sqlite自定义框架。
- SQLite数据库创建与增删查改
- 安卓SQLite数据库创建与共享
- SQLite 数据库安装与创建数据库
- Sqlite数据库的创建与方法
- Android中Sqlite的创建与使用
- 【玩转SQLite系列】(二)SQLite创建和打开数据库的三种方式
- 文件的创建,打开与关闭
- 2. --SQLite 打开数据库
- WINCE6.0 下的应用程序开机启动
- c/c++内存释放知识总结
- 我的第一个网站
- 详解大端模式和小端模式
- POJ 2251 ——Dungeon Master
- SQLite 创建与打开
- Setting up Mercurial on Mac
- 指针自身的地址、指针保存的地址和指针保存地址处的内容,为什么使用指针
- 3.跟我一起学建站之hibernate Helloworld xml版
- MVFM框架----模块间最大化解耦之广播监听模式
- UIPageControl 分页控件-IOS开发
- 敏捷开发实践初体验
- Fragment 实例(1234)
- ExpandableListActivity学习笔记