目录
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;
}