iOS应用数据持久化(二)之SQLite3

一、数据库是什么?

SQL语言简洁,语法简单,易学易用
SQL(structured query language):是一种结构化查询语言
SQL是一种对关系型数据库中的数据进行定义和操作的语言

二、SQLite 数据库是什么?

SQLite百科

《iOS应用数据持久化(二)之SQLite3》 SQLite百科介绍

三、SQL语句的种类

*1. DDL(Data Definition Language) – 数据定义语句

| 命令 |描述 |
| ————- |:————- —–:|
|CREATE | 创建一个新的表,一个表的视图,或者数据库中的其他对象 |
| ALTER | 修改数据库中的某个已有的数据库对象,比如一个表 |
| DROP | 删除整个表,或者表的视图,或者数据库中的其他对象 |

*2. DML(Data Manipulation Language) – 数据操作语句

| 命令 |描述 |
| ————- |:————- —–:|
|INSERT |新增数据 |
| UPDATE | 修改数据库中的某个已有的数据库对象,比如一个表 |
|DELETE | 删除整个表,或者表的视图,或者数据库中的其他对象 |

*3. DQL(Data Query Language) – 数据查询语句

| 命令 |描述 |
| ————- |:————- —–:|
|SELECT |查询数据 |

四、条件语句的介绍

如果只想更新或者删除某些固定的记录,那就必须在DML语句后加上一些条件
条件语句的常见格式

1.WHERE

| WHERE |判断 | 注释|
| ————- |:————- —–:|
|where |字段 = 某个值 | 不能用==(两个等号) |
|where |字段 is 某个值 |is 相当于 = |
|where |字段 != 某个值 |~|
|where |字段 is not 某个值 |is not 相当于 != |
|where |字段 > 某个值|~|
|where |字段1 = 某个值 and 字段2 > 某个值 |and相当于C语言中的 && |

另外:
where    字段1 = 某个值 or 字段2 = 某个值    //or 相当于C语言中的 ||
示例
将t_zorn表中姓名等于zorn 并且电话不等于110的记录
update t_zorn set name = 'zorn' where number != 110 ;```
####2.LIKE
| 语句        |描述 |
| ------------- |:------------- -----:|
|WHERE number LIKE '110%'     | 查找以110开头的任意值 |
| WHERE number LIKE '%110%'      | 查找任意位置包含110的任意值 |
|WHERE number LIKE '_10%' |查找第二位和第三位为10的任意值|
|WHERE number LIKE '0_%_%'     | 查找以0开头,且长度至少为3个字符的任意值 |
| WHERE number LIKE '%112'      |查找以112结尾的任意值 |
|WHERE number LIKE '_1%2' |查找第二位为1,且以2结尾的任意值|
|WHERE number LIKE '2__3' |查找长度为5位数,且以2开头以3结尾的任意值|

注意:⚠️
%是转义字符,两个%才表示一个%“`

3.LIMIT

使用limit可以精确地控制查询结果的数量,比如每次只查询10条数据
格式
select * from 表名 limit 数值1, 数值2 ;
示例
select * from t_zorn limit 4, 8 ;

可以理解为:跳过最前面4条语句,然后取8条记录
limit常用来做分页查询,比如每页固定显示5条数据,那么应该这样取数据

| 页数 |LIMIT | 数值|
| ————- |:————- —–:|
|第1页 |limit | 0, 5 |
|第2页 |limit |5, 5 |
|第3页 |limit |10, 5|
|… || |
|第n页 |limit|5*(n-1), 5|

select * from t_zorn limit 7 ;这条语句的作用相当于select * from t_student limit 0, 7 ;表示取最前面的7条记录

五、SQLite语法介绍

1)SQLite将数据划分为以下几种存储类型:
integer      整型值,根据值的大小存储在 1、2、3、4、6 或 8 字节中。
real               浮点值,存储为 8 字节的 IEEE 浮点数字。
text                文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。
blob              二进制数据,根据它的输入存储。```

注意:实际上SQLite是无类型的,就算声明为integer类型,还是能存储字符串文本(主键除外)
建表时声明啥类型或者不声明类型都可以,也就意味着创表语句可以这么写:
create table t_zorn(name, number);
提示:为了保持良好的编程规范、方便程序员之间的交流,编写建表语句的时候最好加上每个字段的具体类型
 
#####2)**sqlite 的方法简介**

sqlite3 *db, 数据库的象征(句炳),跟文件句柄FILE很类似
sqlite3_open(), 打开数据库,没有数据库时创建。
sqlite3_exec(), 执行非查询的sql语句
Sqlite3_step(), 在调用sqlite3_prepare后,使用这个函数在记录集中移动。
Sqlite3_close(), 关闭数据库文件
sqlite3_stmt *stmt, 这个相当于ODBC的Command对象,用于保存编译好的SQL语句
sqlite3_column_text(), 取text类型的数据。
sqlite3_column_blob(),取blob类型的数据
sqlite3_column_int(), 取int类型的数据“`

3)SQLite语句
*1.打开数据库
SQLITE_API int SQLITE_STDCALL sqlite3_open(
    const char *filename,   /* 数据库文件路径 (UTF-8) */
    sqlite3 **ppDb          /* 数据库句炳(象征) */
    );

*2.执行任何SQL语句 (除了查询语句)
SQLITE_API int SQLITE_STDCALL sqlite3_exec(
    sqlite3*,            /* 一个打开的数据库实例 */
    const char *sql,     /* 需要执行的SQL语句 */
    int (*callback)(void*,int,char**,char**),  /* SQL语句执行完毕后的回调 */
    void *,              /* 回调函数的第1个参数 */
    char **errmsg        /* 错误信息(用来调试) */
          
*3.检查SQL语句的合法性(查询前的准备)
SQLITE_API int SQLITE_STDCALL sqlite3_prepare_v2(
    sqlite3 *db,            /* 数据库实例 */
    const char *zSql,       /* 需要检查的SQL语句, UTF-8 encoded */
    int nByte,              /* SQL语句的最大字节长度 */
    sqlite3_stmt **ppStmt,  /* OUT: sqlite3_stmt实例,用来获得数据库数据 */
    const char **pzTail     /* OUT: 指向 sql 语句中未使用的部分  */
);

*4.查询一行数据
int sqlite3_step(sqlite3_stmt*); // 如果查询到一行数据,就会返回SQLITE_ROW``
                                         
*5.利用stmt获得某一字段的值(字段的下标从0开始)
 double sqlite3_column_double(sqlite3_stmt*, int iCol);             // 浮点数据
const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);  // 字符串数据
int sqlite3_column_int(sqlite3_stmt*, int iCol);                    // 整型数据
sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);        // 长整型数据
const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);           // 二进制文本数据

六、基本操作

导入libsqlite3.tbd

《iOS应用数据持久化(二)之SQLite3》 libsqlite3-1.png

《iOS应用数据持久化(二)之SQLite3》 libsqlite3-2.png

1.创建表 (create)

格式
create table 表名;
create table if not exists 表名 ;
示例
create table t_zorn;
create table if not exists t_zorn;

2.插入数据(insert)

格式
insert into 表名 (字段1, 字段2, …) values (字段1的值, 字段2的值, …) ; 
示例
insert into t_student (name, number) values ('zorn', 123567) ; 
注意
数据库中的字符串内容应该用单引号 ' 括住

3.删表(drop)

格式
drop table 表名 ;
drop table if exists 表名 ;
示例
drop table t_zorn;
drop table if exists t_zorn ;
注意
上面的示例会将t_zorn表中所有记录都删掉 

4.指定位置删除数据(delete)

格式
delete from 表名 where 字段1 = 1 ;
示例
delete from t_zorn where id = 1 ;

5.查询数据(select)

格式
select 字段1, 字段2, … from 表名 ;
select * from 表名;   //  查询所有的字段
示例
select name, age from t_zorn ;
select * from t_zorn ;
select * from t_zorn where number > 110 ;  //  条件查询 ```

####6.更改数据(update)

格式
update 表名 set 字段1 = 字段1的值, 字段2 = 字段2的值, … ;
示例
update t_zorn set name = ‘ren’, numer = 112 ;
注意
上面的示例会将t_zorn表中所有记录的name都改为ren,number都改为112 [可添加where(相当于if)做判断]



###总结:
####SELECT的其它用法

*select还可以起别名(适用于字段和表)
格式
select 字段1 别名 , 字段2 别名 , … from 表名 别名 ;
select 字段1 别名, 字段2 as 别名, … from 表名 as 别名 ;
select 别名.字段1, 别名.字段2, … from 表名 别名 ;
示例
select name myname, number mynumber from t_zorn t_Ren;
给name起个叫做myname的别名,给number起个叫做mynumber的别名,给t_zorn起个叫做t_Ren的别名
select w.name, w.number from t_student s ;
给t_zorn表起个别名叫做w,利用s来引用表中的字段

*select计算记录的数量
格式
select count (字段) from 表名 ;
select count ( * ) from 表名 ;
示例
select count (number) from t_zron ;
select count ( * ) from t_zorn where number = 110;

*select排序
查询出来的结果可以用order by进行排序
select * from t_zorn order by 字段 ;
select * from t_zorn order by age ;
默认是按照升序排序(由小到大),也可以变为降序(由大到小)
select * from t_zorn order by age desc ; //降序
select * from t_zorn order by age asc ; // 升序(默认)
也可以用多个字段进行排序
select * from t_zorn order by age asc, height desc ;
先按照年龄排序(升序),年龄相等就按照身高排序(降序)“`

附上SQLite管理工具下载地址(仅供参考):

《iOS应用数据持久化(二)之SQLite3》 SQLite Professional

->
SQLite管理工具下载

实战:

-> SQLite3Demo

《iOS应用数据持久化(二)之SQLite3》 运行时的主界面

    原文作者:超人猿
    原文地址: https://www.jianshu.com/p/2a4a019e6cda
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞