(so easy)嵌入式数据库——sqlite

目录

1.数据库管理工具对数据库操作

2.代码创建使用数据库


Sqlite数据库管理工具来操作sqlite数据库文件

Sqlite打开数据库管理工具进行使用操作

1.数据库管理工具对数据库操作

安装sqlite3数据库管理工具

sudo apt-get install sqlite3

在命令行输入:sqlite3——打开数据库管理工具

(1) 数据库命令:以 . 开头,表示使用数据库管理

.help:帮助,显示所有的数据库命令

.open:打开某个数据库,当数据库文件不存在时创建——open filename.db

.quit:退出数据库管理工具

.database:查看当前打开的数据库

.tables:查看当前数据库中的表(数据库文件的数据以表进行存储)

(2)数据库语句:对数据库进行数据操作(增删查改)。以;结尾

# 创建表:create table 表名(字段1,字段2 ,字段3.......);

字段:字段名 字段类型 属性

# 增加数据:

第一种:insert inio 表名 values(字段值1,字段值2,字段值3....)

第二种:insert inio user 表名(字段1,字段n)values(字段名1值,字段名n值)

# 查询数据

Select 字段1 字段2...  from 表名(where 条件),where不写表示所有数据都满足条件,*表示所有

# 修改数据

updata 表名 set字段名=值,字段2=值 where 条件;

 表示更新满足条件的对应的某条或多条数据

# 删除数据

delete from 表名 where条件;

满足条件的某条或者多条数据

# 删除表

drop table 表名;

2.代码创建使用数据库

在程序中也会存储数据,操作数据,可以使用数据库来作为存储。在程序中会操作数据库——使用关于数据库的API函数

sudo apt-get install libsqlite3-dev

# 打开数据库文件

int sqlite3_open(const char *filename,sqlite3 **ppDb);

参数1:

const char *filename:要打开的数据库文件的路径

参数2:

sqlite3 **ppDb:sqilte3* 一级指针用于标识一个打开的数据库文件,想通过参数来设置打开的数据库文件,说明想修改一级指针,传一级指针的地址是sqlite3 **ppDb:设置打开的数据库文件

返回值:

        成功:返回0(SQLITE_OK)

        失败:返回非0

# 操作数据库文件:执行指定的sql语句

int sqlite3_exec(

 sqlite3 * pdb,/*要操作的打开的数据库文件*/

 const char *sql,/*数据库操作的sql语句字符串*/

 int (*callback)(void*,int,char**,char**),/*函数指针,回调函数,当执行sql语句时有一个执行结果就调用执行一次这个函数*/

 void * arg, /*提供给callback函数的第一个参数 */

 char **errmsg/* 错误信息首地址的地址,把错误信息放在首地址这个变量中 */

);

返回值:

        成功:返回0

        失败:返回非0

回调函数,每找到一条记录就执行一次,当exec执行时,有结果就调用,参数就是exec执行的结果内容

int callback(void * arg,int f_num,char **f_val,char**

f_name)

参数:

参数1:

void * arg:在exec函数中指定传递给callback的参数

参数2:

int f_num:一条结果记录中包含的字段数

参数3:

char **f_val:指针数组的首地址,存储一条结果中的每个字段值

参数4:

char** f_name:指着数组的首地址,存储一条结果中的每个字段字段名

# 关闭数据库文件

int sqlite3_close(sqlite3 * pdb);

参数1:

sqlite3 * pdb:句柄,一级指针标识打开的数据文件

返回值:

成功:返回0  失败:返回非0

总体实现代码如下:

//存储id、用户名、密码在数据库,用于操作(增、删、修、查询)

#include <stdio.h>

#include <stdlib.h>

#include <sqlite3.h>


int callok(void * arg,int f_num,char **f_val,char **f_name)

{

printf("%s\n",(char *)arg);

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

{

printf("%s|",f_name[i]);

}

printf("\n");


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

{

printf("%s|",f_val[i]);

}


printf("\n");

return 0;

}


int main()

{

//1、打开数据库文件,如果没有就创建

sqlite3 *pdb;//用于表示打开的数据库文件

if(sqlite3_open("user.db",&pdb) == SQLITE_OK)//打开数据库

{

printf("open success\n");

}

else

{

printf("open failed\n");

exit(-1);

}



//2、操作数据库文件

// char sql[100];

// sprintf(sql,"create table %s(%s,%s,%s)","stu","name text","age int","sex text");

// printf("%s\n",sql);

/*

char createsql[] = "create table users(id int not null,name text not null,passwd text)";

int ret = sqlite3_exec(pdb,createsql,NULL,NULL,NULL);

if(ret == 0)

{

printf("create ok\n");

}

else

{

printf("create error\n");

}


char sql[100];

memset(sql,0,100);

int id = 0;

char name[20] = "xiaozhang";

char passwd[20] = "123456";

//添加数据

sprintf(sql,"insert into users values(%d,\"%s\",'%s')",id,name,passwd);

printf("%s\n",sql);

sqlite3_exec(pdb,sql,NULL,NULL,NULL);

char sql[100];

char name[20] = "xiaoli";

char passwd[20] = "123456543";

sprintf(sql,"update users set name='%s',passwd='%s' where id=%d",name,passwd,0);

sqlite3_exec(pdb,sql,NULL,NULL,NULL);

*/

//查询 select from

char *msg = NULL;

int ret = sqlite3_exec(pdb,"select * from users ",callok,"ok",&msg);

if(msg != NULL && ret != 0)

{

printf("%s\n",msg);

}


//3、关闭数据库文件

if(sqlite3_close(pdb) == 0)

{

printf("close success\n");

}

else

{

printf("close failed\n");

exit(-1);

}

return 0;

}

猜你喜欢

转载自blog.csdn.net/qq_53676406/article/details/129288231
so
SO?