Sqlite3嵌入式数据库

一、SQLite常用命令介绍

注:qlite3 指令(通常以 . 开头)

1. 创建或打开一个数据库文件

在终端下运行 sqlite3< *.db >

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

sqlite > .database

3. 显示数据库中所有表名

sqlite > .tables

4. 查看表的结构

sqlite > .schema <table_name>

5. 显示所有命令

sqlite > .help

6. 退出 sqlite3

sqlite > .quit

二、SQLite创建数据库与表常用命令介绍

注:每个命令以 ;结束

1. 创建新表

     sqlite > create table <table_name> (f1 type1, f2type2,...);

type为数据类型,有如下类型:

NULL、INTEGER、REAL、TEXT、BLOB

注:若未指定类型,默认是字符串,即TEXT类型。

2. 删除表

sqlite > drop table <table_name>;

3. 查询表中所有记录

       sqlite >select * from<table_name>;

4. 按指定条件查询表中记录

sqlite >select * from <table_name>where <expression>;

5. 向表中添加新纪录

sqlite >insert into <table_name>values(value1,value2,...);

6. 按指定的条件删除表中记录

sqlite >delete from <table_name>where <expression>;

7. 更新表中记录

sqlite > updata <table_name> set<f1=value1>,<f2=value2>... where <expression>;

8. 在表中添加字段

sqlite > alter table <table> addcolumn <field><type> defalut... ;

三、示例例程

1. 在shell中安装sqlite3命令:

sudo apt-get install sqlite sqlite3      

Sudo apt-get install libsqlite3-dev

2. sqlite3常用命令:创、增、删、改、查

以创建学生表为例,学生表包含学号、姓名、性别、年龄字段

1)创:创建新表

       sqlite>create table stu (sno integer primary key,sname text not null,ssextext,sage integer default 18);

       注:第一个字段为 sno,数值类型为 integer,属性为primary key

第二个字段为 sname,数值类型为 text(字符串),属性为not null(不能为空)

第三个字段为 ssex 数值类型为 text

第四个字段为 sage 数值类型为integer 默认值为 18

2)增:

a)  向表中增加新记录

sqlite> insertinto stu values(12345,'wang','m',24);

b)  向表中增加新字段

sqlite> alter table stu add spwd text default '12345';

3)删:

a) 向表中删除记录(注:在sqlite3中不存在删除字段)

sqlite> deletefrom stu where sname = 'wang';

       b)删除表

sqlite>droptable stu;

4)改:更改表中记录

sqlite> updatestu set spwd = '98765' where sno = 12347;

5)查:查询表中记录

       a)查询表中所有记录

sqlite>select*from stu;

b) 查询表中某一条记录

sqlite> select*from stu1 where sname = 'peng';

四、sqlite3编程接口

注1:以下所有函数头文件为:#include<sqlite3.h>

注2:这些函数在shell下man命令查找不到

1. 函数原型:int   sqlite3_open(char  *path,  sqlite3 **db);

功能:打开数据库

参数:char  *path:   数据库的名字

sqlite3 **db:   数据库句柄

返回值:成功返回0,失败返回错误码(非零值)

2. 函数原型:int   sqlite3_close(sqlite3*db);

功能:关掉数据库

返回值:成功返回0,失败返回错误码

 

3. 函数原型:const  char  *sqlite3_errmsg(sqlite3 *db);

功能:提取错误信息

 

4. 函数原型:int   sqlite3_exec(sqlite3 *db, const  char *sql,  sqlite3_callback callback,void *,  char **errmsg);

功能:执行一条sqlite3的语句

参数:sqlite3 *db     

char  *sql:   sql命令语句

sqlite3_callbackcallback:  回调函数,如果命令带有返回信息,就会调用该函数

void * : 给回调函数传递参数

char**errmsg :   错误信息

返回值:成功返回0,失败返回错误码

 

5. 函数原型:typedef  int (*sqlite3_callback) (void *para, int f_num, char **f_value,char **f_name);

功能:每找到一条记录自动执行一次回调函数

参数:para:传递给回调函数的参数

 f_num:记录中包含的字段数目                        3

      f_value:包含每个字段值的指针数组               

      f_name:包含每个字段名称的指针数组

返回值:成功返回0,失败返回-1

 

6. 函数原型:int   sqlite3_get_table(sqlite3*db, const  char  *sql, char ***resultp,  int*nrow,  int *ncolumn, char **errmsg);

功能:执行SQL操作,会把所有的结果一次性返回给我们,而sqlite3_callback函数返回多次

参数:db:  数据库句柄

      *sql: sql命令语句

      resultp: 用来指向sql执行结果的指针,所有结果还包括标题

      nrow : 满足条件的记录的数目,比如记录12345、‘wang’、‘m’、24算一个      

      ncolumn:每条记录包含的字段数目,比如sno、sname等

      errmsg:错误信息指针的地址

返回值:成功返回0,失败返回错误码

4. 示例代码1

通过callback回显执行命令select * from stu后的所有结果

/*************************************************************************

 @Author: wanghao

 @Created Time : Thu 31 May 2018 03:36:43 AMPDT

 @File Name: sqlite.c

 @Description:

 ************************************************************************/

#include <stdio.h>

#include <stdlib.h>

#include <sqlite3.h>

#define MAXSIZE 128

int callback(void * para, int f_num, char**f_value, char ** f_name);

int main(int argc, const char *argv[])

{

       sqlite3*db;

       char*errmsg;

       //charsql[MAXSIZE] = "create table if not exists stu(sno integer primarykey,sname text not null, ssex text default 'm', sage integer default 19)";

       //charsql[MAXSIZE] = "insert into stu values(12351,'liubang','m',18)";

       //charsql[MAXSIZE] = "insert into stu values(12352,'zhuyuanzhang','m',28)";

       //charsql[MAXSIZE] = "update stu set sage = 88 where sno > 20";

       //charsql[MAXSIZE] = "delete from stu where sno = 12345";

       charsql[MAXSIZE] = "select * from stu";

       if(sqlite3_open("my.db",&db) != SQLITE_OK)

       {

              printf("error:%s\n",sqlite3_errmsg(db));

              return-1;

       }

       if(sqlite3_exec(db,sql, callback, NULL, &errmsg) != SQLITE_OK)

       {

              printf("error:%s\n",errmsg);

              return-2;

       }

       sqlite3_close(db);

       return0;

}

int callback(void * para, int f_num, char**f_value, char ** f_name)

{

       inti;

       printf("************************************\n");

       for(i= 0; i < f_num; i++)

       {

              printf("%s: %s\n",f_name[i], f_value[i]);

       }

       return0;

}

示例代码2:通过sqlite3_get_table回显执行命令select * from stu后的所有结果。

/*************************************************************************

 @Author: wanghao

 @Created Time : Thu 31 May 2018 03:36:43 AMPDT

 @File Name: sqlite.c

 @Description:

 ************************************************************************/

#include <stdio.h>

#include <stdlib.h>

#include <sqlite3.h>

#define MAXSIZE 128

int main(int argc, const char *argv[])

{

       sqlite3*db;

       char*errmsg;

       char**resultp;

       intnrow, ncolumn, i, j, index;

       charsql[MAXSIZE] = "select * from stu";

       if(sqlite3_open("my.db",&db) != SQLITE_OK)

       {

              printf("error:%s\n",sqlite3_errmsg(db));

              return-1;

       }

       if(sqlite3_get_table(db,sql, &resultp, &nrow, &ncolumn, &errmsg) != SQLITE_OK)

       {

              printf("error:%s\n",errmsg);

              return-2;

       }

       index= ncolumn;

       printf("***************************************\n");

       for(i= 0; i < nrow; i++)

       {

              for(j= 0; j < ncolumn; j++)

              {

                     printf("%s:%s\n",resultp[j], resultp[index++]);

              }

       }

       sqlite3_close(db);

       return0;

}


猜你喜欢

转载自blog.csdn.net/weixin_42048417/article/details/80572943