嵌入式数据库——sqlite3

前言

数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。

分类

数据库可以分为三种
小型:sqlite —嵌入式数据库
中型:mysql
大型:db2

数据库的设计

sqlite xx.db (有则打开,无责创建)
touch xx.db
4.2 创建数据库表 ===》行列式表格,可以创建多个;

首先登录数据库 sqlite3 xxx.db

1.系统命令:以.开头命令(对框的操作)
.help 查看帮助
.exit 退出
.database 查看当前的数据库的信息
.table 查看数据库中表的信息
.schema 表名 查看指定表结构 //学号 姓名 年龄 分数

.2创建表:
create table 表名(
列名1 数据类型 约束,
列名2 数据类型 约束
);
其中注意 sqlite3的语句必须是以分号结尾的(;)结尾的
约束:
primary key:主键,一个列的唯一标识符,该列数据必须是唯一,且不能为空
not null:非空,不能为空
null:默认约束,可以省略不写,代表该列数据可以为空

        数据类型:
            int 				整型
            varchar(长度)		字符串
            decimal(10,2) 		小数,(总长度,小数位的长度)     99999999.99
            bit:布尔值,		只接受0或1
            char(长度)    		字符串
            text:长文本
		/*例子:
		
			create table stu_info(
			id int primary key,
			name char(20) not null,
			age int null,
			score decimal(4,1)
			);		
		
		*/

4.3 表的增加 删除 修改 查询操作:SQL 语句

增:insert  into 表名(列名,列名,...) values (值1,值2,...);
eg: insert into user(id,name,pass) values (1,"zhangsan","123456");
    insert into user values(2,"abc",123);
	insert into user(id) values (3);
	//如果不写列名的话,就按照定义时候的顺序来插入
	//注意:如果是字符串需要使用''引号,如果表名后没有跟列名则数据顺序必须是按照表顺序
    //不能为空的列必须有实际的数据添加,可以为空列如果不想加数据用null占位

查:select 列名  from  表名称 [条件];
eg: select * from user;
	select id from user;
	select id,pass from user;
	select * from user where id = 1;
	select * from user where  id > 2;
	select * from user where  id > 1 and name = "abc";
	select * from user where  id < 10 or id > 20;
	select id,name from user where age > 11;
	 查询出的数据是有序:
                select * from 表 order by 列名 asc(默认升序,降序是desc);
	
	改:update  表名称 set 列名 = 值 [条件];
eg:
	update  user  set pass = "8888" where id = 1;
	update user set pass = "777" ; ///注意 会全表修改为777密码
	update user set pass = "666" where id>3; ///注意:会修改所有>3的id记录数据
	update user set pass = "666" ,name = "abc" where id = 1;
	update user set pass = "555" where id > 1 and name  = "ccc";
	update user set pass = "777" where id >1 and  id < 1;  //???

删: delete from 表名称 [条件];
eg: delete from user where id = 1; ///正常删除一行记录
	 delete from user where  id >3;
	 delete from user where  id > 3 and score <60;
     delete from user;   ///注意:全表数据清空
	 drop table user;    ///注意:表删除

数据库的表的增、删、修、查:基本格式:
insert into
delete from
update set
select from

逻辑运算:and(&&) or(||) not(!)
注意:
为空的数据查询条件不能用=
is null
is not null

数据库的表批量处理:数据库脚本 ===》xxx.sql

1、数据库的脚本导出:
sqlite3 xxx.db .dump > xxx.sql

单表导出:
sqlite>.output xxx.sql
slqite>.dump xxx 要导出的表名称
sqlite>.q
会在当前目录下自动创建一个xxx.sql存储的是xxx单表的数据内容。

2、数据库的脚本导入:
sqlite3 xxx.db < xxx.sql

sqlite3 的编程接口:

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

打开:
int sqlite3_open(
const char filename, / Database filename (UTF-8) */
sqlite3 *ppDb / OUT: SQLite db handle */
);

功能:该函数可以用于打开指定路径+名称的sqlite3数据库;
参数:filename 要打开的数据库路径+名称;
ppdb 打开之后的数据库句柄;
返回值:成功 0
失败 -1;

关闭:
int sqlite3_close(sqlite3 *db);
功能:关系已经打开的数据库;
参数:db要关闭的数据库句柄
返回值: 成功 0
失败-1;

操作:查询
int sqlite3_get_table(
sqlite3 db, / An open database */
const char zSql, / SQL to be evaluated */
char **pazResult, / Results of the query */
int pnRow, / Number of result rows written here */
int pnColumn, / Number of result columns written here */
char *pzErrmsg / Error msg written here */
);

功能:该函数主要用于对数据库中指定表的查询操作;
参数:db 已经打开的数据库句柄 == sqlite3_open的参数2 的值;
zSql 表示要在数据库中执行的sql语句,一般是select语句;
pazResult 结果集,表示最终查询的结果地址;
pnRow 结果集中数据的行个数;
pnColum 结果集中数据的列个数;
pzErrmsg 查询异常的信息记录;
返回值:成功 0
失败 -1;

操作:通用
int sqlite3_exec(
sqlite3db, / An open database /
const char sql, / SQL to be evaluated /
int (callback)(voidarg,int,char
,char**), /* Callback function /
void * arg, /
1st argument to callback */
char *errmsg / Error msg written here */
);

功能:该函数用于数据库中所有的常规操作,主要用于可能改动数据的
增加 删除 修改操作。
参数: db 要执行操作的数据库句柄;
sql 要执行的sql操作语句,主要是 insert delete update
callback 回调函数指针,只用于查询的时候生效。
arg 回调函数的第一个参数;
errmsg 执行sql的异常信息;
返回值:成功 0
失败-1

回调函数:callback 用于sqlite3_exec执行查询语句的是调用;
int (callback)( voidarg,int num ,char** va,char**na), /* Callback function */
参数:arg 由外部sqtlie3_exec的传入的参数;
num 执行sql语句的结果个数;
va 执行sql之后的数据值
na 执行sql之后的数据列名称
返回值: 成功 0
失败 -1 ;

注意:该回调函数在每查询到一条记录就执行一次;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值