SQLite 创建与打开

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt 是一个跨平台的应用程序开发框架,它提供了许多方便的工具和类来进行数据库操作。SQLite 则是一个轻量级的嵌入式关系型数据库引擎,它可以在本地磁盘上创建和管理数据库。 在 Qt 中创建一个 SQLite 数据库的过程如下: 1. 导入必要的头文件: ```cpp #include <QSqlDatabase> #include <QSqlQuery> ``` 2. 创建一个数据库对象: ```cpp QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); ``` 3. 设置数据库的名称和路径: ```cpp db.setDatabaseName("mydatabase.db"); ``` 4. 打开数据库连接: ```cpp if (db.open()) { // 数据库连接成功 } else { // 数据库连接失败 } ``` 5. 创建表格: ```cpp QSqlQuery query; query.exec("CREATE TABLE IF NOT EXISTS person (id INT PRIMARY KEY, name TEXT, age INT)"); ``` 以上代码演示了如何在 Qt 中创建数据库和表格。在第一步中,我们导入了必要的头文件。然后,我们创建了一个 QSqlDatabase 对象,并指定了数据库引擎为 "QSQLITE",表示我们要使用 SQLite。接下来,在第三步中,我们设置了数据库的名称和路径。如果该数据库不存在,则会自动创建一个新的数据库文件。在第四步中,我们打开了数据库连接,并进行了连接状态的检查。最后,在第五步中,我们使用 QSqlQuery 对象来执行 SQL 查询,并创建了一个名为 "person" 的表格,该表格包含了 id(整数类型)、name(文本类型)和 age(整数类型)三个字段。 这样,我们就成功地使用 Qt 创建了一个 SQLite 数据库和一个表格。需要注意的是,根据需要,我们可以在表格中添加更多的字段,并根据业务逻辑进行相应的增删改查操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值