使用sqlite3数据库,实现增删改查操作
#include <myhead.h>
int do_add(sqlite3 *sqdb)
{
int add_num;
char add_name[128];
double add_score;
printf("请输入要添加的学生编号:");
scanf("%d",&add_num);
printf("请输入要添加的学生姓名:");
scanf("%s",add_name);
printf("请输入要添加的学生分数:");
scanf("%lf",&add_score);
getchar();
char sql[128]="";
snprintf(sql,sizeof(sql),"insert into Stu values(%d,\"%s\",%.2lf);",add_num,add_name,add_score);
char *errmsg=NULL;
if(sqlite3_exec(sqdb,sql,NULL,NULL,&errmsg) != SQLITE_OK)
{
printf("insert into Stu errro:%s\n",errmsg);
sqlite3_free(errmsg);
return -1;
}
printf("插入成功\n");
}
int do_delete(sqlite3 *sqdb)
{
int id=0;
char sql[128]="";
printf("请输入要删除的学生的编号:");
scanf("%d",&id);
getchar();
snprintf(sql,sizeof(sql),"delete from Stu where num=%d;",id);
char *errmsg=NULL;
if(sqlite3_exec(sqdb,sql,NULL,NULL,&errmsg) != SQLITE_OK)
{
printf("delete from Stu err:%s\n",errmsg);
sqlite3_free(errmsg);
return -1;
}
}
int do_update(sqlite3 *sqdb)
{
int id=0;
char name[128]="";
double score=0;
printf("请输入要修改的学生编号:");
scanf("%d",&id);
printf("请输入要修改的学生姓名:");
scanf("%s",name);
printf("请输入要修改的学生成绩:");
scanf("%lf",&score);
getchar();
char sql[128]="";
snprintf(sql,sizeof(sql),"update Stu set name=\"%s\",score=%.2lf where num=%d;",name,score,id);
char *errmsg=NULL;
if(sqlite3_exec(sqdb,sql,NULL,NULL,&errmsg) != SQLITE_OK)
{
printf("update error:%s\n",errmsg);
sqlite3_free(errmsg);
return -1;
}
}
int callback(void* arg,int cols,char **col_text,char **col_name)
{
if(*(int*)arg == 0)
{
for(int i=0;i<cols;i++)
printf("%s\t",*(col_name+i));
}
printf("\n");
*(int*)arg=1;
for(int i=0;i<cols;i++)
printf("%s\t",*(col_text+i));
printf("\n");
return 0;
}
int do_search(sqlite3 *sqdb)
{
int flag=0;
char sql[128]="select * from Stu";
char *errmsg=NULL;
if(sqlite3_exec(sqdb,sql,callback,&flag,&errmsg) != SQLITE_OK)
{
printf("Stu search error:%s\n",errmsg);
sqlite3_free(errmsg);
return -1;
}
printf("查找结束\n");
}
int do_search1(sqlite3 *sqdb)
{
char sql[128]="select * from Stu;";
char **pazResult=NULL;
int row=0;
int col=0;
char *errmsg=NULL;
if(sqlite3_get_table(sqdb,sql,&pazResult,&row,&col,&errmsg) != SQLITE_OK)
{
printf("get_table error:%s\n",errmsg);
sqlite3_free(errmsg);
return -1;
}
for(int i=0;i<row+1;i++)
{
for(int j=0;j<col;j++)
printf("%s\t",pazResult[i*col+j]);
printf("\n");
}
sqlite3_free_table(pazResult);
return 0;
}
int main(int argc, const char *argv[])
{
sqlite3* sqdb=NULL;
int res=sqlite3_open("my.db",&sqdb);
if(res != SQLITE_OK)
{
int err_code=sqlite3_errcode(sqdb);
printf("open error:%d %s\n",err_code, sqlite3_errmsg(sqdb));
return -1;
}
printf("db open success\n");
char sql[128]="create table if not exists Stu(num int,name char,score double);";
char *errmsg=NULL;
if(sqlite3_exec(sqdb,sql,NULL,NULL,&errmsg) != SQLITE_OK)
{
printf("sqlite create table error:%s\n",errmsg);
sqlite3_free(errmsg);
return -1;
}
printf("table Stu create success\n");
//制作菜单完成学生管理系统
int menu=0;
while(1)
{
system("clear");
printf("\t\t=======学生信息管理系统=======\n");
printf("\t\t=======1、添加学生信息=======\n");
printf("\t\t=======2、删除学生信息=======\n");
printf("\t\t=======3、修改学生信息=======\n");
printf("\t\t=======4、查看学生信息=======\n");
printf("\t\t=======0、退出=======\n");
printf("请输入功能选项:\n");
scanf("%d",&menu);
getchar();
switch(menu)
{
case 1:
{
do_add(sqdb);
}
break;
case 2:
{
do_delete(sqdb);
}
break;
case 3:
{
do_update(sqdb);
}
break;
case 4:
{
do_search(sqdb);
// do_search1(sqdb);
}
break;
case 0:goto END;
default:printf("您输入的选项有误,请重新输入\n");
}
printf("请输入任意键按回车清屏\n");
while(getchar() != '\n');
}
END:
sqlite3_close(sqdb);
return 0;
}