Android 数据库知识点总结
注0:本文也同样整理于 6 月 13 日
注1:去年我最怕的两个知识点是多线程和数据库,而现在,我虽然都能使用了,但是,应届生简历怎么没人回 QAQ
-
Android 数据库知识点总结
SQLite 基础知识
概述
轻量型的数据库,被广泛使用在多个操作系统平台上。优势在于 Android SDK 集成。解决方案繁多。
Android 还可以使用其他第三方数据库,例如,db4o 面向对象数据库
SQLite 数据库如何查询表 table1 的第 20 条到第 30 条记录。
查询语句:select * from table1 limit 19, 11
插入表数据,如果存在则更新,不存在则正常插入语句
replace into table1(id, name) value(1, 'bill');
复制 table1 表结构的数据到 table2 上
cerate table table2 as select * from table1
创建视图的 SQL 语句
创建视图(查询 table1 表的所有记录)
create view if not exists view1 as select * from table1
SQLite 函数
核心函数
abs(X) 函数的返回值
abs 函数会自动尝试将当前字段值转换为整形,再取绝对值。
但考虑到 X 未取实际值,所以有以下几种情况
- X 为正值和 0 ,执行后返回 X 本身
- X 为负值, 返回 X 的绝对值
- X 为 NULL , 返回 NULL- X 为字符串、Blob 等不能转换为数值的类型,返回 0 。 Tips:如果为数值字符串,则按数值处理 - X 的值超出 64 位整数值范围,抛出一个溢出错误 获取最近一次执行 SQL 语句所影响的记录行数 使用 changes 函数 insert into table1 values(1, 'bill'); -- 返回 insert 语句影响的记录行数 select changes(); 查询一张表中需要的字段 select coalesce(name, id) as value from table1 除了使用 coalesce 函数外,如果只查询两个参数,还可以用 ifnull 函数 select ifnull(name, id) as value from table1 length(X) 函数返回值 - X 是字符串类型的值, 返回字符串包含的字符数 - X 是 Blob 类型的值, 返回二进制数据中包含的字节数 - X 为 NULL, 返回 NULL - X 是整数值, 将 X 作为字符串处理,例如,length(123) 的值是 3 使用 like 子句和 like 函数查询 table1 中 name 字段值包含 bill 的记录 函数 select * from table1 where like ('%bill%', name) SQL 语句 select * from table1 where name like '%bill%' nullif(X, Y) 函数的用法 当 X 和 Y 不同, 返回 X, 相同,返回 NULL 例子 select nullif(20, 30) 输出 20 select nullif(20, 20) 输出 NULL substr 函数的用法 用于截取字符串的子字符串。substr(原字符串, 截取位置(从1开始数), 截取长度) 例子 str = "abcdefg" select substr(str, 2) 结果:bcdefg select substr(str, 2, 3) 结果:bcd select substr(str, -2) 结果:fg Tips:负数表示从后面往前面数 select substr(str, -6, -3) 结果:bcd 如果最后一个值为负数,会取绝对值 获取当前字段的数据类型 使用 typeof 函数 select typeof(field1) from table1; 日期和时间函数 SQLite 支持的时间函数 五个 date time datetime julianday strftime 使用 date 函数和调节器修改要输出的日期 select date('2012-11-01', '-1 years', '+1 months'); 当前日期 2011-07-02 执行下面语句的输出与解释 SELECT date('now', 'start of month', '+1 month', '-1 day'); start of month 会将日期变为 2011-07-01 +1 month 转为 2011-08-01 -1 day 转为 2011-07-31 输出当前时间的 SQL 语句 SELECT date('now'); 下面 SQL 语句的输出结果 SELECT time('12:33:33', '-2 minutes'); 结果:12:31:33 关于 UTC 时间查询,下面查询语句中的时间为 北京时间 SELECT datetime('2011-01-02 01:01:01', 'utc'); UTC 时间比北京时间晚 8 小时 输出:2011-01-01 17:01:01 输出当前时间至 1970-01-01 的秒数 SELECT strftime('%s', 'now'); 关于 SQLite 支持的格式置换符 %d 两位的日。如果不足两位,前面补 0 %f 形如 SS.SSS 的秒。后面的 SSS 表示毫秒 %H 24 进制的小时 %j 一年中的第几天(001 - 366) ....... 如果想了解的话,请自行查询 聚合函数 函数 avg(X) 的计算规则 此函数为计算平均值 X 为 NULL 时,X 不参与计算平均值 X 为 String 或 BLOD 时, 如果可以转换成数值,正常计算其平均值。如果不能,X 当做 0 处理 所有参与统计平均值的字段值都为 NULL 时, avg 函数返回 NULL 计算表中一个字段 name 的平均数 SELECT avg(name) from table1 将表中一个字段连接起来,中间用分号(;)隔开 SELECT group_concat(name, ';') from table1
在 Android 中使用 SQLite
SQLiteOpenHelper.onCreate 和 SQLiteOpenHelper.onUpgrade 方法在什么情况下执行
主要负责数据库的创建和升级
- 如果数据库文件不存在,会调用 onCreate 方法。
- 如果数据库文件存在,并且当前的版本号高于上次创建或升级时的版本号,则会调用 onUpgrade 方法。
从数据库表中查询所有记录,并显示在 ListView 组件中
使用 Cursor 对象装载查询出来的数据,如果需要的话,可以用 List 进行装载。
数据库文件存储路径
保存在 /data/data/<package name>/databases 目录下
Android 支持的打开或创建 SQLite 数据库的方式
- 1 SQLiteOpenHelper 类
- 2 Context.openOrCreateDatabase 方法
- 3 SQLiteDatabase.openOrCreateDatabase 方法
将带数据的 SQLite 数据库与 apk 程序一同发布
不能直接操作,所以通常的做法将数据库放在 assets 或 res/raw 目录中,这两个目录中的资源文件不会被编译。
在程序第一次启动的时候把数据库文件复制到应用存储空间,或者 SD 目录中。
面向对象数据库:db4o
概述
一个嵌入式的开源面向对象数据库,基于对象,操作的数据本身就是对象。
对象的持久化需要一个映射文件将关系型数据库与对象进行关联,使用起来麻烦,无法处理复杂的问题。
特征
- 对象以其本身方式来存储,没有错误匹配问题
- 自动管理数据模式
- 存储时不改变类特征,使之易于存储
- 与 Java 和 .Net 无缝绑定
- 自动数据绑定
- 使用简单,只需要一个 jar(Java) 或 dll (.Net) 文件即可
- 一个数据库文件。这一点与 SQLite 相同
- 直接通过对象实例查询
总结
如果要使用的话,可以自己去看哦。。