数据库相关函数
数据库创建
int sqlite3_open( const char *filename, sqlite3 **ppDb);
功能:打开数据库,不存在则创建
参数:const char *filename 数据库名
sqlite3 **ppDb 二级指针,传出ppDb数据库的一级指针
返回值:成功返回SQLITE_OK 失败返回错误码 sqlite_errmsg()来获取错误信息
关闭数据库和错误信息
int sqlite3_close(sqlite3* ppDb) & const char * sqlite3_errmsg(sqlite3* ppDb)
int sqlite3_errcode(sqlite3 *db)
功能:关闭数据库 参数返回值参上
功能:返回错误信息 返回值为错误信息字符串
功能:返回错误码 返回错误码
操作数据表
int sqlite3_exec(sqlite3 *ppDb,const char *sql
,int (*callback)(void*,int,char**,char**),void*,char**errmsg)
功能:实现sql指令
参数:
|------------------------------------------------|-----------|
| sqlite3 *ppDb | 数据库 |
| const char *sql | sql指令 |
| int (*callback)(void*,int,char**,char**) | 结果输出函数 |
| void* | 传入输出函数的参数 |
| char**errmsg | 错误信息 |int (*callback)(void*,int,char**,char**)
|---------------------|--------|
| void *arg | 外部传入参数 |
| int cols | 列数 |
| char** msg_text | 数据文本 |
| char** msg_header | 表头 |要输出结果用结果输出函数,无需填NULL
返回值:参上
代码实现增删改查
#include <stdio.h>
#include <25061head.h>
int table_add(sqlite3 *pdb)
{
int num;
char name[18];
char sex[10];
double score;
printf("请输入学号 姓名 性别 成绩\n");
scanf(" %d %s %s %lf",&num,name,sex,&score);
//添加信息
char sql[128]="";
sprintf(sql,"insert into stuinfo values(%d,\"%s\",\"%s\",%.2lf);",\
num,name,sex,score);
char *errmsg=NULL;
if(sqlite3_exec(pdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
{
printf("添加信息失败 %s \n",errmsg);
sqlite3_free(errmsg);
return -1;
}
printf("添加信息成功\n");
return 0;
}
int table_delete(sqlite3 *pdb)
{
int delete_num;
printf("请输入删除信息的学号\n");
scanf("%d",&delete_num);
getchar();
char sql[128]="";
sprintf(sql,"delete from stuinfo where num=%d",delete_num);
char *errmsg=NULL;
if(sqlite3_exec(pdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
{
printf("删除信息失败 %s \n",errmsg);
sqlite3_free(errmsg);
return -1;
}
printf("信息删除成功\n");
return 0;
}
int table_updata(sqlite3 *pdb)
{
int updata_num;
char updata_msg[32]="";
printf("请输入要更新信息的学号\n");
scanf("%d",&updata_num);
getchar();
printf("请输入要更新的信息 eg: score=90 name='ttt'\n");
scanf("%s",updata_msg);
//updata_msg[strlen(updata_msg)+1]=' ';
getchar();
char sql[128]="";
//printf("num=%d\n",updata_num);
sprintf(sql,"update stuinfo set %s where num=%d",updata_msg,updata_num);
//printf("%s\n",sql);
char *errmsg=NULL;
if(sqlite3_exec(pdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
{
printf("更新信息失败 %s \n",errmsg);
sqlite3_free(errmsg);
return -1;
}
printf("更新信息成功\n");
return 0;
}
int callback(void *arg,int cols,char** msg_text,char** msg_header)
{
if(*(int *)arg==0)
{
*(int *)arg=1;
for(int i=0;i<cols;i++)
{
printf("%s\t",*(msg_header+i));
}
putchar(10);
}
for(int j=0;j<cols;j++)
{ printf("%s\t",*(msg_text+j));}
putchar(10);
return 0;
}
int table_select(sqlite3 *pdb)
{
char sql[128]="";
sprintf(sql,"select * from stuinfo");
char *errmsg=NULL;
int arg=0;
if(sqlite3_exec(pdb,sql,callback,&arg,&errmsg)!=SQLITE_OK)
{
printf("展示信息失败\n");
sqlite3_free(errmsg);
return -1;
}
}
int main(int argc, const char *argv[])
{
//创建数据库
sqlite3 *pdb=NULL;
int ret=sqlite3_open("./my.db",&pdb);
if(ret!=0)
{
printf("sqlite3_open error errcode=%d errmsg=%s\n",\
sqlite3_errcode(pdb),sqlite3_errmsg(pdb));
return -1;
}
//创建数据表
char *sql="create table if not exists stuinfo \
(num int,name text,sex char,score double);";
char *errmsg=NULL;
if(sqlite3_exec(pdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
{
printf("创建数据表失败 %s \n",errmsg);
sqlite3_free(errmsg);
return -1;
}
printf("数据表创建成功\n");
int i;
while(1)
{
printf("1.添加信息\n");
printf("2.删除信息\n");
printf("3.修改信息\n");
printf("4.展示信息\n");
printf("输入\n");
scanf("%d",&i);
getchar();
switch(i)
{
case 1: table_add(pdb);break;
case 2: table_delete(pdb);break;
case 3: table_updata(pdb);break;
case 4: table_select(pdb);break;
case 0:exit(0);
default: printf("输入错误 重新输入\n");
}
}
return 0;
}
今日刷题
