2023年6月21日发(作者:)

Android学习之SQLite数据库存储•引⾔概念  SQLite数据库,和其他的SQL数据库不同, 我们并不需要在⼿机上另外安装⼀个数据库软件,Android系统已经集成了这个数据库;特点SQLite是⼀个轻量级的关系型数据库,运算速度快,占⽤资源少,很适合在移动设备上使⽤不仅⽀持标准SQL语法,还遵循ACID(数据库事务)原则,⽆需账号,使⽤起来⾮常⽅便SQLite⽀持五种数据类型NULLinteger(整型)real(浮点型)text(⽂本类型)blob(⼆进制类型)SQLite 通过⽂件来保存数据库

⼀个⽂件就是⼀个数据库数据库中⼜包含多个表格表格⾥⼜有多条记录每条记录由多个字段构成每个字段都有对应的值•创建数据库  Android为了让我们能够更加⽅便地管理数据库,专门提供了⼀个 SQLiteOpenHelper 帮助类;  借助这个类就可以⾮常简单地对数据库进⾏创建和升级。

  SQLiteOpenHelper 是⼀个抽象类,这意味着如果我们想要使⽤它的话,就需要创建⼀个⾃⼰的帮助类去继承它;  SQLiteOpenHelper 中有两个抽象⽅法,分别是

oncreate() 和

onUpgrade() ;

onCreate(database) : 数据库第⼀次被创建时被调⽤

onUpgrade(database,oldVersion,newVersion) : 在数据库的版本发⽣变化时会被调⽤⼀般在软件升级时才需改变版本号,⽽数据库的版本是由程序员控制的假设数据库现在的版本是 1,由于业务的变更,修改了数据库表结构,这时候就需要升级软件,升级软件时希望更新⽤户⼿机⾥的数据库表结构为了实现这⼀⽬的,可以把原来的数据库版本设置为 2,或者其他与旧版本号不同的数字即可  我们必须在⾃⼰的帮助类⾥⾯重写这两个⽅法,然后分别在这两个⽅法中去实现 创建、升级数据库 的逻辑。

  SQLiteOpenHelper 中还有两个⾮常重要的实例⽅法:

getReadableDatabase() 和

getWritableDatabase() 。  这两个⽅法都可以 创建或打开 ⼀个现有的数据库(如果数据库已存在则直接打开,否则创建⼀个新的数据库),  并返回⼀个可对数据库进⾏读写操作的对象。  不同的是,当数据库不可写⼊的时候(如磁盘空间已满):

getReadableDatabase() ⽅法返回的对象将以只读的⽅式去打开数据库

getWritableDatabase() ⽅法则将出现异常    SQLiteOpenHelper 中有三个构造⽅法可供重写,⼀般使⽤参数少⼀点的那个:

SQLiteOpenHelper(Context context, String name, Factory factory, int version)

  该构造⽅法中接收四个参数:

Context context :这个没什么好说的,必须有这个才能对数据库进⾏操作

String name :第⼆个参数是数据库名,创建数据库时使⽤的就是这⾥指定的名称

Factory factory :第三个参数允许我们在查询数据的时候返回⼀个⾃定义的 Cursor,⼀般都是传⼊null

int version :第四个参数表⽰当前数据库的版本号,可⽤于对数据库进⾏升级操作  构建出 SQLiteOpenHelper 的实例之后,再调⽤它的

getReadableDatabase() 或

getWritableDatabase() ⽅法就能够创建数据库了;  数据库⽂件会存放在

/data/data//databases/ ⽬录下;  此时,重写的

onCreate() ⽅法也会得到执⾏,所以通常会在这⾥去处理⼀些创建表的逻辑。•通过代码深⼊理解准备⼯作  ⾸先新建⼀个 TestDatabase 项⽬。  在该项⽬中新建 MyDatabaseHelper 类,继承⾃ SQLiteOpenHelper;blic class MyDatabaseHelper extends SQLiteOpenHelper { public static final String CREATE_BOOK = "create table Book (" + "id integer primary key autoincrement," + "name text," + "price real)"; private Context mContext; public MyDatabaseHelper(@Nullable Context context, @Nullable String name, @Nullable Factory factory, int version) { super(context, name, factory, version); mContext = context; } @Override public void onCreate(SQLiteDatabase db) { L(CREATE_BOOK); xt(mContext,"Create Succeeded!",_SHORT).show(); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }}  可以看到,我们把建表语句定义成了⼀个字符串常量,然后在

onCreate() 中调⽤了

L(CREATE_BOOK); 去执⾏这条建表语句;  之后,弹出⼀个 Toast 提⽰建表成功,这样就可以保证在数据库创建的同时创建 Book 表;  在 SQL 中,Book 表的建表语句如下:CREATE TABLE Book( id INTEGER PRIMARY KEY autoincrement, NAME TEXT, price REAL);  其中,设置 id 为 primary key,并⽤ autoincrement 关键字表⽰ id 列是⾃增长的。  接下来,修改 activity_ 中的代码;activity_