当前位置:K88软件开发文章中心编程语言APP编程Android01 → 文章内容

6.3.1 数据存储与访问之——初见SQLite数据库

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-12 6:26:37

本节引言:本节我们继续来学习Android数据存储与访问的第三种方式:SQLite数据库,和其他的SQL数据库不同,我们并不需要在手机上另外安装一个数据库软件,Android系统已经集成了这个数据库,我们无需像使用其他数据库软件(Oracle,MSSQL,MySql等)又要安装,然后完成相关配置,又要改端口之类的!引言就说这么多,接下来我们来学习下这个东西~1.基本概念1)SQLite是什么?为什么要用SQLite?SQLite有什么特点?答:下面请听小猪娓娓道来:①SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,很适合在移动设备上使用,不仅支持标准SQL语法,还遵循ACID(数据库事务)原则,无需账号,使用起来非常方便!②前面我们学习了使用文件与SharedPreference来保存数据,但是在很多情况下,文件并不一定是有效的,如多线程并发访问是相关的;app要处理可能变化的复杂数据结构等等!比如银行的存钱与取钱!使用前两者就会显得很无力或者繁琐,数据库的出现可以解决这种问题,而Android又给我们提供了这样一个轻量级的SQLite,为何不用?③SQLite支持五种数据类型:NULL,INTEGER,REAL(浮点数),TEXT(字符串文本)和BLOB(二进制对象)虽然只有五种,但是对于varchar,char等其他数据类型都是可以保存的;因为SQLite有个最大的特点:你可以各种数据类型的数据保存到任何字段中而不用关心字段声明的数据类型是什么,比如你可以在Integer类型的字段中存放字符串,当然除了声明为主键INTEGER PRIMARYKEY的字段只能够存储64位整数! 另外, SQLite 在解析CREATE TABLE 语句时,会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息如下面语句会忽略 name字段的类型信息:CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))小结下特点:SQlite通过文件来保存数据库,一个文件就是一个数据库,数据库中又包含多个表格,表格里又有多条记录,每个记录由多个字段构成,每个字段有对应的值,每个值我们可以指定类型,也可以不指定类型(主键除外)PS:对了,Android内置的SQLite是SQLite 3版本的~2)几个相关的类:嘿嘿,学习一些新东西的时候,最不喜欢的莫过于遇到一些新名词,是吧,我们先来说下几个我们在使用数据库时用到的三个类:SQLiteOpenHelper:抽象类,我们通过继承该类,然后重写数据库创建以及更新的方法,我们还可以通过该类的对象获得数据库实例,或者关闭数据库!SQLiteDatabase:数据库访问类:我们可以通过该类的对象来对数据库做一些增删改查的操作Cursor:游标,有点类似于JDBC里的resultset,结果集!可以简单理解为指向数据库中某一个记录的指针!2.使用SQLiteOpenHelper类创建数据库与版本管理对于涉及数据库的app,我们不可能手动地去给他创建数据库文件,所以需要在第一次启用app的时候就创建好数据库表;而当我们的应用进行升级需要修改数据库表的结构时,这个时候就需要对数据库表进行更新了;对于这两个操作,安卓给我们提供了SQLiteOpenHelper的两个方法,onCreate( )与onUpgrade( )来实现方法解析:onCreate(database):首次使用软件时生成数据库表onUpgrade(database,oldVersion,newVersion):在数据库的版本发生变化时会被调用,一般在软件升级时才需改变版本号,而数据库的版本是由程序员控制的,假设数据库现在的版本是1,由于业务的变更,修改了数据库表结构,这时候就需要升级软件,升级软件时希望更新用户手机里的数据库表结构,为了实现这一目的,可以把原来的数据库版本设置为2或者其他与旧版本号不同的数字即可!代码示例:public class MyDBOpenHelper extends SQLiteOpenHelper { public MyDBOpenHelper(Context context, String name, CursorFactory factory, int version) {super(context, "my.db", null, 1); } @Override //数据库第一次创建时被调用 public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE person(personid INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20))"); } //软件版本号发生改变时调用 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("ALTER TABLE person ADD phone VARCHAR(12) NULL"); }}代码解析:上述代码第一次启动应用,我们会创建这个my.db的文件,并且会执行onCreate()里的方法,创建一个Person的表,他又两个字段,主键personId和name字段;接着如我我们修改db的版本号,那么下次启动就会调用onUpgrade()里的方法,往表中再插入一个字段!另外这里是插入一个字段,所以数据不会丢失,如果是重建表的话,表中的数据会全部丢失,下一节我们会来教大家如何解决这个问题!流程小结:Step 1:自定义一个类继承SQLiteOpenHelper类Step 2:在该类的构造方法的super中设置好要创建的数据库名,版本号Step 3:重写onCreate( )方法创建表结构Step 4:重写onUpgrade( )方法定义版本号发生改变后执行的操作3.如何查看我们生成的db文件当我们调用上面的MyDBOpenhelper的对象的getWritableDatabase()就会在下述目录下创建我们的db数据库文件:我们发现数据库有两个,前者是我们创建的数据库,而后者则是为了能让数据库支持事务而产生的临时的日志文件!一般的大小是0字节!而在File Explorer里我们确是打不开文件的,连txt都打不开,何况是.db!所以下面给大家两条路选:1.先导出来,然后用SQLite的图形化工具查看2.配置adb环境变量后,通过adb shell来查看(命令行,装比利器)!嗯,接着给大家演示上述两种方法,选自己喜欢的一种就可以了~~方法1:使用SQLite图形化工具查看db文件这类软件有很多,笔者用的是SQLite Expert Professional,当然你也可以使用其他工具又需要的可以下载:SQLiteExpert.zip把我们的db文件导出到电脑桌面,打开SQLiteExpert,界面如下:别问我怎么玩,导入db后自己慢慢玩,用法很简单,不懂百度~至于方法二,本来是想试试的,后来发现sqlite命令找不到,试了几次就算了,后面用到在细扣,有兴趣可以找下郭霖的《第一行代码——Android》按着流程图试试!这里只贴前面的一部分,命令部分自己看书!方法2:adb shell命令行带你装逼带你飞1.配置

[1] [2] [3]  下一页


6.3.1 数据存储与访问之——初见SQLite数据库