1、SQLite3是一款开源的嵌入式关系型数据库,可移植性好、易使用、内存开销比较小
SQLite3是无类型的,意味着你可以保存任何类型的数据到任意表的任意字段中
2、 SQLite3常用的5种数据类型:text(文本)、integer(整型)、real(浮点值)、blob(二进制)
3、 在iOS中使用SQLite3,首先要添加库文件libsqlite3.dylib和导入主头文件
4、 创建或打开数据库
// path为:~/Documents/person.db
sqlite3 *db;
int result = sqlite3_open([path UTF8String], &db);
代码解析:sqlite3_open()将根据文件路径打开数据库,如果不存在,则会创建一个新的数据库。如果result等于常量SQLITE_OK,则表示成功打开数据库。数据库文件的路径必须以C字符串(而非NSString)传入
关闭数据库:sqlite3_close(db);
5、执行创表语句
char *errorMsg; // 用来存储错误信息
char *sql = "create table if not exists t_person(id integer primary key autoincrement, name text, age integer);";
int result = sqlite3_exec(db, sql, NULL, NULL, &errorMsg);
代码解析:sqlite3_exec()可以执行任何SQL语句,比如创表、更新、插入和删除操作。但是一般不用它执行查询语句,因为它不会返回查询到的数据
sqlite3_exec()还可以执行的语句:
①开启事务:begin transaction;
②回滚事务:rollback;
③提交事务:commit;
6、基本操作
①创建表:
(1) table if not exists 表名 (字段名1 字段类型1, 字段名2 字段类型2, …) ;
(2)create table 表名 (字段名1 字段类型1, 字段名2 字段类型2, …) ;
特别说明:(1)就算声明为integer类型,还是能存储字符串文本(主键除外)
(2)建表时声明啥类型或者不声明类型都可以,也就意味着创表语句可 以这么写:create table t_student(name, age);(为了保持良好的编程规范、方便程序员之间的交流,编写建表语句的时候最好加上每个字段的具体类型)
②删除表:
(1)drop table 表名 ;
(2)drop table if exists 表名 ;
③插入数据:
insert into 表名 (字段1, 字段2, …) values (字段1的值, 字段2的值, …) ;
注意:数据库中的字符串内容应该用单引号 ’ 括住
④更新数据:
update 表名 set 字段1 = 字段1的值, 字段2 = 字段2的值, … ;
⑤删除数据:
delete from 表名 ;
⑥条件语句的常见格式:
where 字段 = 某个值 ; // 不能用两个 =
where 字段 is 某个值 ; // is 相当于 =
where 字段 != 某个值 ;
where 字段 is not 某个值 ; // is not 相当于 !=
where 字段 > 某个值 ;
where 字段1 = 某个值 and 字段2 > 某个值 ; // and相当于C语言中的 &&
where 字段1 = 某个值 or 字段2 = 某个值 ; // or 相当于C语言中的 ||
⑦查询语句:
select 字段1, 字段2, … from 表名 ;
select * from 表名; // 查询所有的字段
⑧起别名:格式(字段和表都可以起别名)
select 字段1 别名 , 字段2 别名 , … from 表名 别名 ;
select 字段1 别名, 字段2 as 别名, … from 表名 as 别名 ;
select 别名.字段1, 别名.字段2, … from 表名 别名 ;
⑨计算记录的数量:格式
select count (字段) from 表名 ;
select count ( * ) from 表名 ;
⑩排序:
查询出来的结果可以用order by进行排序
select * from t_student order by 字段 ;
select * from t_student order by age ;
默认是按照升序排序(由小到大),也可以变为降序(由大到小)
select * from t_student order by age desc ; //降序
select * from t_student order by age asc ; // 升序(默认)
也可以用多个字段进行排序
select * from t_student order by age asc, height desc ;
先按照年龄排序(升序),年龄相等就按
7、limit:使用limit可以精确地控制查询结果的数量,比如每次只查询10条数据
格式:select * from 表名 limit 数值1, 数值2 ;
示例:select * from t_student limit 4, 8 ;(可以理解为:跳过最前面4条语句,然后取8条记录)
8、建表的约束:
建表时可以给特定的字段设置一些约束条件,常见的约束有
not null :规定字段的值不能为null
unique :规定字段的值必须唯一
default :指定字段的默认值(建议:尽量给字段设定严格的约束,以保证数据的规范性)