Android初级基础知识复习(六) —— 数据库SQLite

数据库SQLite

Android的数据库存储方式—— SQLite的使用方法,包括如何建表和删表、变更表结构以及对 表数据进行增加、删除、修改、查询等操作。

SQLite的基本用法

SQLite是一个小巧的嵌入式数据库,使用方便、开发简单,手机上最早由iOS运用,后来Android也采用 了SQLite。SQLite的多数SQL语法与Oracle一样,下面只列出不同的地方:
(1)建表时为避免重复操作,应加上IF NOT EXISTS关键词,例如CREATE TABLE IF NOT EXISTS table_name。
(2)删表时为避免重复操作,应加上IF EXISTS关键词,例如DROP TABLE IF EXISTS table_name。
(3)添加新列时使用ALTER TABLE table_name ADD COLUMN …,注意比Oracle多了一个COLUMN 关键字。
(4)在SQLite中,ALTER语句每次只能添加一列,如果要添加多列,就只能分多次添加。
(5)SQLite支持整型INTEGER、字符串VARCHAR、浮点数FLOAT,但不支持布尔类型布尔类型数要使用整型保存如果直接保存布尔数据,在入库时SQLite就会自动将其转为0或1,0表示false,1表示 true
(6)SQLite建表时需要一个唯一标识字段,字段名为_id。每建一张新表都要例行公事加上该字段定 义,具体属性定义为_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL。
(7)条件语句等号后面的字符串值要用单引号括起来,如果没用使用单引号括起来,在运行时就会报错。

SQLiteDatabase是SQLite的数据库管理类,开发者可以在活动页面代码或任何能取到Context的地方获取 数据库实例,参考代码如下:
// 创建名叫test.db的数据库。数据库如果不存在就创建它,如果存在就打开它
SQLiteDatabase db = openOrCreateDatabase(getFilesDir() + “/test.db”, Context.MODE_PRIVATE, null);
// 删除名叫test.db数据库
// deleteDatabase(getFilesDir() + “/test.db”);
SQLiteDatabase提供了若干操作数据表的API,常用的方法有3类,列举如下:

1.管理类,用于数据库层面的操作。

  1. openDatabase:打开指定路径的数据库。
  2. isOpen:判断数据库是否已打开。
  3. close:关闭数据库。
  4. getVersion:获取数据库的版本号。
  5. setVersion:设置数据库的版本号。

2. 事务类,用于事务层面的操作

  1. beginTransaction:开始事务。
  2. setTransactionSuccessful:设置事务的成功标志。
  3. endTransaction:结束事务。执行本方法时,系统会判断是否已执行setTransactionSuccessful,如果之 前已设置就提交,如果没有设置就回滚。

3. 数据处理类,用于数据表层面的操作。

  1. execSQL:执行拼接好的SQL控制语句。一般用于建表、删表、变更表结构。
  2. delete:删除符合条件的记录。
  3. update:更新符合条件的记录。
  4. insert:插入一条记录。
  5. query:执行查询操作,返回结果集的游标。
  6. rawQuery:执行拼接好的SQL查询语句,返回结果集的游标。

数据库帮助器SQLiteOpenHelper

SQLiteDatabase存在局限性,例如必须小心、不能重复地打开数据库,处理数据库的升级很不方便。Android提供了一个辅助工具—— SQLiteOpenHelper,用于指导开发者进行SQLite的合理使用。
SQLiteOpenHelper的具体使用步骤如下:
步骤01 新建一个继承自SQLiteOpenHelper的数据库操作类,提示重写onCreate和onUpgrade两个方法。其中,onCreate方法只在第一次打开数据库时执行,在此可进行表结构创建的操作;onUpgrade方法在数据库版本升高时执行,因此可以在onUpgrade函数内部根据新旧版本号进行表结构变更处理。
步骤02 封装保证数据库安全的必要方法,包括获取单例对象、打开数据库连接、关闭数据库连接。 获取单例对象:确保App运行时数据库只被打开一次,避免重复打开引起错误。 打开数据库连接:SQLite有锁机制,即读锁和写锁的处理;故而数据库连接也分两种,读连接可调 用SQLiteOpenHelper的getReadableDatabase方法获得,写连接可调用getWritableDatabase获得。 关闭数据库连接:数据库操作完毕后,应当调用SQLiteDatabase对象的close方法关闭连接。
步骤03 提供对表记录进行增加、删除、修改、查询的操作方法。 可被SQLite直接使用的数据结构是ContentValues类,类似于映射Map,提供put和get方法用来存取键值对。区别之处在于ContentValues的键只能是字符串,查看ContentValues的源码会发现其内部保存键值对的 数据结构就是HashMap“private HashMap<String, Object>mValues;”。ContentValues主要用于记录增加和更新操作,即SQLiteDatabase的insert和update方法。 对于查询操作来说,使用的是另一个游标类Cursor。调用SQLiteDatabase的query和rawQuery方法时,返回的都是Cursor对象,因此获取查询结果要根据游标的指示一条一条遍历结果集合
Cursor的常用方法可分为3类,说明如下:

1. 游标控制类方法,用于指定游标的状态。

  1. close:关闭游标。
  2. isClosed:判断游标是否关闭。
  3. isFirst:判断游标是否在开头。
  4. isLast:判断游标是否在末尾。

2. 游标移动类方法,把游标移动到指定位置。

  1. moveToFirst:移动游标到开头。
  2. moveToLast:移动游标到末尾。
  3. moveToNext:移动游标到下一条记录。
  4. moveToPrevious:移动游标到上一条记录。
  5. move:往后移动游标若干条记录。
  6. moveToPosition:移动游标到指定位置的记录。

3. 获取记录类方法,可获取记录的数量、类型以及取值。

  1. getCount:获取结果记录的数量。
  2. getInt:获取指定字段的整型值。
  3. getFloat:获取指定字段的浮点数值。
  4. getString:获取指定字段的字符串值。
  5. getType:获取指定字段的字段类型

优化记住密码功能

  现在运用SQLite技术分条存储不同用户的登录信息,并提供根据手机号码查找登录信息的方法,这样 可以同时记住多个手机号码的密码。具体的改造主要有以下3点:
(1)声明一个UserDBHelper对象,然后在活动页面的onResume方法中打开数据库连接,在onPasue方 法中关闭数据库连接。
(2)登录成功时,如果用户勾选了“记住密码”,就使用数据库保存手机号码与密码在内的登录信息。 也就是在loginSuccess函数中增加。
(3)再次打开登录页面,用户输入手机号完毕后点击密码输入框时,App到数据库中根据手机号查找 登录记录,并将记录结果中的密码填入密码框。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值