1、SQLite 数据库
SQLite 是一种轻型的嵌入式数据库,安卓和 iOS 开发使用的都是 SQLite 数据库。它占用资源非常低,在嵌入式设备中,可能需要几百 K 的内存数据就够了。他的处理速度比 Mysql、PostgreSQL 这两款著名的数据库都要快。数据库的存储和 Excel 很像,以表(table)为单位。表由多个字段(列、属性、column)组成,表里面的每一行数据称为记录。数据库操作包含打开数据库、创建表,表的增、删、改、查。
SQL(Structured Query Language)结构化查询语言,SQL 是一种对数据库中的数据进行定义和操作的语言。使用 SQL 语言编写出来的句子/代码叫 SQL 语句,在程序运行过程中,想要操作(增删改查,CRUD)数据库中的数据,必须使用 SQL 语句。SQL 语句不区分大小写,每句语句都必须以分号结尾。
SQL 中常用的关键字有 select、insert、update、delete、from、create、where、desc、orderby、table,数据库中不可以使用关键字来命名表、字段。SQL 语句中用 ?来作为占位符,不管字段是何种类型。
- SQLite 语句的种类:
- 数据定义语句(DDL:Data Definition Language):包括 create 和 drop 等操作,在数据库中创建新表或删除表(create table 或 drop table)。
- 数据操作语句(DML:Data Manipulation Language):包括 insert、update、delete 等操作,上面的三种操作分别用于添加、修改、删除表中的数据。
- 数据查询语句(DQL:Data Query Language):可以用于查询获得表中的数据,关键字 select 是 SQL(也是所有 SQL)用的最多的操作,其他 DQL 常用的关键字有 where、order by、group by 和 having。
注意:写入数据库,字符串可以采用 char 方式,而从数据库中取出 char 类型,当 char 类型有表示中文字符时,会出现乱码。这是因为数据库默认使用 ASCII 编码方式。所以要想正确从数据库中取出中文,需要用 NSString 来接收从数据库取出的字符串。
SQLite 操作方法
sqlite3 *db 数据库句柄,跟文件句柄很类似 sqlite3_stmt *stmt 这个相当于 ODBC 的 Command 对象,用于保存编译好的 SQL 语句 sqlite3_open() 打开数据库,没有数据库时创建。 sqlite3_exec() 执行非查询的 sql 语句 sqlite3_prepare_v2 执行查询的 sql 语句 Sqlite3_step() 在调用 sqlite3_prepare 后,使用这个函数在记录集中移动。 sqlite3_free() 清空变量 Sqlite3_close() 关闭数据库文件 还有一系列的函数,用于从记录集字段中获取数据,如: sqlite3_column_text() 取 text 类型的数据。 sqlite3_column_blob() 取 blob 类型的数据 sqlite3_column_int() 取 int 类型的数据
SQLite 命令行
.help :帮助 .quit :退出 .database:列出数据库信息 .dump :查看所有的 sql 语句 .schema :查看表结构 .tables :显示所有的表
SQL 语句常用数据类型
(1)整型: bigint :整形数据,大小为 8 个字节 integer :整形数据,大小为 4 个字节 smallint:整形数据,大小为 2 个字节 tinyint :从 0 到 255 的整形数据,存储大小为 1 字节 (2)浮点型: float :4 字节浮点数 double:8 字节浮点数 real :8 字节浮点数 (3)字符型: char(n) :n 长度的字串,n 不能超过 254 varchar(n):长度不固定且其长度为 n 的字串,n 不能超过 4000 text :text 存储可变长度的非 unicode 数据,存放比 varchar 更大的字符串 注意事项: 尽量用 varchar 超过 255 字节的只能用 varchar 或 text 能用 varchar 的地方不用 text SQLite 字符串区别: char 存储定长数据很方便,char 字段上的索引效率极高,比如定义 char(10),那么不论你存储的数据是否达到了 10 个字节,都要占去 10 个字节的空间,不足的自动用空格填充。 varchar 存储变长数据,但存储效率没有 char 高,如果一个字段可能的值是不固定长度的,我们只知道它不可能超过 10 个 > 字符,把它定义为 varchar(10) 是最合算的,varchar 类型的实际长度是它的值的实际长度 +1,为什么 +1 呢 ?这个字节用于保存实际使用了多大的长度。因此,从空间上考虑,用 varchar 合适,从效率上考虑,用 char 合适,关键是根据情况找到权衡点。 text 存储可变长度的非 Unicode 数据,最大长度为 2^31-1(2147483647)个字符。 (4)日期类型: date :包含了年份,月份,日期 time :包含了小时,分钟,秒 datetime :包含了年,月,日,时,分,秒 timestamp:包含了年,月,日,时,分,秒,千分之一秒 注意:datetime 包含日期时间格式,必须写成 ‘2010-08-05’不能写为‘2010-8-5’,否则在读取时会产生错误。 (5)其他类型: null :空值 blob :二进制对象,主要用来存放图片和声音文件等 default :缺省值