加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite 创建与打开

发布时间:2020-12-12 20:20:07 所属栏目:百科 来源:网络整理
导读:在Android中我们通过SQLiteDatabase这个类的对象操作SQLite数据库。由于SQLite数据库并不需要像C/S数据库那样建立连接以及身份验证的特性以及SQLite数据库单文件数据库的特性使得获得SQLiteDatabase对象就像获得操作文件的对象那样简单。 要创建或打开一个SQ

在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空间完美搬家到新浪博客

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读