数据库(一)——SQLite3数据库编程

最近三天搞得我有点头大,接连Linux进程间通信、多线程编程、网络编程和数据库编程,都是Linux这一块的核心;中间还被导师催论文,每天熬到半夜写论文。今天仿佛是个转折点,论文交上去了,接下来的两天都是自习,今晚宿舍就有空调了,终于不用冻得睡不着了。。。想想就觉得很舒服。好了,废话少说,倒着来吧,先从数据库开始整理。

一、基本SQL语句

1、数据库与表

SQLite将每个数据库都保存为一个文件,后缀为.db

数据库中的数据被组织成的形式。

由若干拥有相同字段的记录组成。//废话

字段指的时记录中的数据域,它有不同的类型,可以是一个数值(integer),也可以是字符串(text)

每个表中可以指定一个或多个字段为主键,表中所有记录的主键的值都不能重复。这种不重复是在插入记录时控制的,即如果向一个表中插入记录时,这个表中已有与插入记录相同的主键的记录,则插入失败。

数据库示意图

2、创建表

create语句可以在数据库中创建表

crearte table student(ID integer, name text, sex text,age intgerprimary key(ID)); //sql语句以;为结尾,系统定                                            义命令除外如 .exit为退出

3、删除表

drop语句可以从数据库中删除指定的表

drop table student;

4、插入记录

insert语句可以向表中插入一条新记录

insert into student values(1,“ZHANG”, 'M', 18);  //text类型既可以用“”也可以用‘’

insert into student (ID, name, sex,age) values (3, "ccc", 'W', 20);   //完整插入一条记录的完整方式

insert into srudent(ID, name) values(2, "BBB");   //这种方式可以省略某条记录的某些字段

insert into student values(1,“ZHANG”, 'M', 18),(2, “wang”,‘W’,20);//,隔开一句插入多个数据

5、修改数据

update语句可以修改表中的记录

update student set Sex = ‘F’  Age = 20 where Name = ‘Zhang’;//where及其后表示过滤条件,如果省略where和后面部分,则语                                        句的作用为修改表student中所有记录

6、删除记录

delete语句可以删除表中的记录

delete from student where ID  = 2;//没有where语句则表student中的所有记录均被删除。

7、where语句

使用where子句时,需要一个比较表达式,满足这个条件的记录将被操作。常用的比较操作符有:

这里主要注意不等于号是<>.和模式匹配 like

几个表达式还可以用逻辑操作符组合起来形成更复杂的表达式:

8、单表查询   ——重点

查询是对数据库最常用操作。查询的结果可以理解为得到一个新表,只是这个表没有保存在数据库里,而是以某种方式显示给查询者。

select语句可以对数据库进行查询:

select * from student;  //查询表student所有记录

select ID, NAME from student where Sex = ‘F’;  //查询student中满足Sex=F的记录的ID和NAME

select * from student where ID between 2 and 4; //查询student中满足ID介于2到4的记录

select distinct * from student;                              //查询student中没有重复的记录

select * from score order by score asc

select * from score order by score dasc;             //查询结果按某个字段的值进行排序

select student.name from student, score where student.id = score.id and score.score < 60 //上述语句中,from关键字后出现两                                                             个表明student和score,表示对这两个表进行联合查询。

selct A.name from student A, score B where A.id = B.id and B.score < 60; //上述语句中,from关键字后的表明都指定了一个别名

                                              别名只在当前语句中有效

 

二、SQLite工具

SQLite库包含一个简单的命令行工具:sqlite3,该工具使得用户可以对一个SQLite数据库手动输入并且执行SQL语句。

启动sqlite3工具:

sqlite3 student.db

其中,student.db是要操作的数据库文件,如果它不存在,则会自动创建一个新的空数据库。

.exit                //退出sqlite互动模式

.help              //列出命令的提示信息

.tables           //显示数据库中所有表名

.schema        //查看表的结构

.detabase      //显示当前打开的数据库文件

 

三、SQLite编程接口

1、关键数据结构

sqlite里最常用的是sqlite 3 *类型。从数据库打开sqlite就要为这个类型准备好内存,直到数据库关闭。相当于文件操作中的文件描述符

2、打开数据库

#include<sqlite3.h>

int sqlite3_open(文件名,sqlite3 **);  

第一个参数是数据库文件名,如:“student.db”。文件不一定要存在,如果这个文件不存在,sqlite会自动建立它。如果它存在,就尝试把它当数据库文件打开。

第二个参数是类似于文件描述符的关键数据结构。在使用sqlite_open打开数据库后,所有对数据库的操作,都使用这个变量

函数返回值为SQLITE_OK表示操作正常。

3、关闭数据库

int sqlite3_close(sqlite3 *);

4、SQL语句操作,执行sql语句  ——重点

(1)回调函数查询方式:

int sqlite3_exec(sqlite3 *, const char *sql, sqlite3_callback, void *, char ** errmsg);

第一个参数是前面的关键数据结构。

第二个参数const char * sql是一条是sql语句,以\0结尾。\\用sprintf(char *, " ",参数表)装入

第三个参数sqlite3_callback是回调函数。当这条语句执行后,sqlite3会自动执行你提供的函数。

第四个参数是传参到回调函数。

第五个参数返回出错的信息。执行sqlite_exec之后,执行失败时可以查阅这个这个指针(printf("%s\n", errmsg))得到一串字符信息,会告知出错地方。不需要回调函数时,参数3,4填写NULL。查找数据时,必须进行查找语句。

回调函数形式:

typedef int (*sqlite_callback)(void* para,int columnCount, char** columnValue,  char** columnName);  //第四个参数的原样。所以用到的回调函数必须定义为这个形式。

para,是从sqlite3_exec()传入的参数指针;

columnCount,查询到的这一条记录有多少个字段(即这条记录有多少列);

columnValue,查询出来的数据都保存在这里,实际上是一个一维数组,每一个元素是一个char*值,是一个字段内容;

columnName,与columnValue是对应的,表示这个字段的字段名称。

(2)不使用回调进行查询的办法:

int sqlite3_get_table(sqlite3*, const char *sql, char ***resultp, int *nrow, int *ncolumn, char **errmsg ); 

第二个参数是sql语句。

第三个参数是查询结果。

第四个参数是查询出多少条记录。多少行。

第五个记录是多少个字段。多少列。

第六个参数是错误信息。

 

O了,休息会开始下一个,网络编程。

猜你喜欢

转载自blog.csdn.net/iotflh/article/details/86543162