sqlite3介绍

数据库:嵌入式数据库-》sqlite3

安装sqlite3数据库:
sudo apt-get install sqlite3*

操做数据库:
命令行:是以.开头的命令是sqlite3系统自带的命令
.exit :退出
.quit :退出
.help :查看sqlite3的帮助手册
.database :查看当前打开的数据库
.schema :查看表结构
.tables :查看当前打开的数据库的表集合

在启动sqlite3的时候,命令行后能够带有一个参数,是指定打开的数据库名称,若存在则打开,没有则建立
例如:
sqlite3 库名.db

sql命令,以;结束

建立一张表:
create table 表名
(
列名1 数据类型 primary key,
列名2 数据类型 not null,
........
);
删除表:
drop table 表名;

新增数据:
insert into 表名 values(值1,值2,值3);
insert into 表名(列名1,列名2..) values (值1,值2);

删除数据:
delete from 表名 where条件; //注意:在作数据删除的时候,必须加上where条件,不然就是所有删除
修改数据:
update 表名 set 列名 = 值 where条件; //注意:在作数据删除的时候,必须加上where条件,不然就是整个列的数据所有修改
查询数据:
select 列名 from 表名;//查询指定列的数据,若是列名处写*表明查询全部列的数据

以条件筛选的形式查找数据:
                                            select * from 表名
                                            where 列名 = 值;

sql中的逻辑运算:
                        and 与
                        or 或
                        not 非
查询空字段的数据条件:
                        select * from 表名 where 列名 is null;

id account password name gender age
1 a12345 a12345 张三 男 18

1.帐号的注册
                    a12345
                    a12345
                    张三
                    男
                    18

2.帐号的登陆
                a12345
                a12345

 




C语言调用相关的API函数来进行数据库的操做


sqlite3中C语言开发接口函数:
头文件:<sqlite3.h>
编译时加上连接库:-lsqlite3

sqlite3_open(const char *pathname,sqlite3 **ppdb):打开一个数据库
返回值:成功返回SQLITE_OK,失败设置错误码,可使用sqlite3_errmsg()
pathname:要打开数据库的路径
ppdb:成功打开的数据库用该类型指针接受

sqlite3_close(sqlite3 *db):关闭数据库,成功返回SQLITE_OK,失败设置错误码

char *sqlite3_errmsg(sqlite3 *db):经过db获取到错误信息的首地址

sqlite3_exec(sqlite3 *db,const char *sql,int (*callback)(void *,int,char **,char **),void *arg,char **errmsg):执行sql语句
参数:db,数据库指针
sql:一条sql语句
callback:回调函数,只有sql为查询的时候,才会执行此语句
arg:回调函数的参数
errmsg:错误消息
返回值:成功返回SQLITE_OK


int (*callback)(void *para,int f_num,char **f_value,char **f_name):回调函数功能,获取查询的结果,没成功找到一条记录就会执行一次该函数
para:传递给回调函数的参数
f_num:一行的列数
f_value:包含每一个字段值的指针数组,数据
f_name:包含每一个字段名称的指针数组,列名
返回值:成功返回0,失败返回-1 必定要填返回值不然报错



select * from studinfo

char **result = {"id","name","age","1","zhangsan","10","2","lisi","20"};

不使用回调函数查询数据库数据:
sqlite3_get_table(sqlite3 *db,const char *sql,char ***paxResult,int *pnRow,int *pnColumn,char **errmsg):
db:数据库
sql:查询语句
paxResult:须要一个二级指针的地址,查询的记录存放在该指针中
例如:
id name age
1 "zhangsan" 10
2 "lisi" 20
3 "wangwu" 30

paxResult[0] = "id"
paxResult[1] = "name"
paxResult[2] = "age"
paxResult[3] = "1"
paxResult[4] = "zhangsan"
paxResult[5] = "10"
pnRow:行数,以上例子该值为3
pnColumn:列数,以上例子该值为3

sql 减法
若是整张表的某个number字段都要减10,以下
update table set number字段= number字段- 10
若是只把number字段= 1000的减10,以下
update table set number字段= number字段- 10 where number字段= 1000;

update  goods set goodsnum=goodsnum-1 where sto_no=1 and goodsno=12

.schema 查看




sqlite time 
 
insert into (字段) values (time( 'now','localtime'))
例如:
insert into collect_env(envTime) values (time( 'now','localtime'))
sql 查询表的最后一条数据
 
select * from  collect_env order by id desc limit 0,1
联合查询:


插入数据: