ubuntu@ubuntu:sk1$ vi Date.c
ubuntu@ubuntu:sk1$ cat Date.c
#include<myhead.h>
#include<sqlite3.h>
int do_reseach(sqlite3 *ppDb);
int do_insert(sqlite3 *ppDb);
int callback(void *arg,int n,char **a,char **b);
typedef struct
{
int ID;
char name[20];
double salary;
}Worker;
//插入
int do_insert(sqlite3 *ppDb)
{
Worker work;
printf("请输入插入的工号>>>");
scanf("%d",&work.ID);
printf("请输入插入的姓名>>>");
scanf("%s",work.name);
printf("请输入插入的薪水>>>");
scanf("%lf",&work.salary);
char *errmsg=NULL;
// char sqlite[100] = "insert into work values(work.ID,work.name,work.salary);" //错误
char sqlite[100] ;
snprintf(sqlite,sizeof(sqlite),"insert into work values(%d,\'%s\',%lf);",work.ID,work.name,work.salary);
if(sqlite3_exec(ppDb,sqlite,NULL,NULL,&errmsg)!=0)
{
perror("sqlite3_exec");
printf("错误码:%d 错误信息:%s ,错误行是:%d\n",sqlite3_errcode(ppDb),sqlite3_errmsg(ppDb),__LINE__);
sqlite3_free(errmsg);
return -1;
}
}
//搜索
int do_reseach(sqlite3 *ppDb)
{
char key[20];
printf("请输入要查找的人姓名:");
scanf("%s",key);
char *errmsg =NULL;
char sqlite[100] ;
snprintf(sqlite,sizeof(sqlite),"select * from work where name==\'%s\';",key);
if(sqlite3_exec(ppDb,sqlite,callback,NULL,&errmsg)!=0)
{
perror("sqlite3_exec");
printf("错误码:%d 错误信息:%s ,错误行是:%d\n",sqlite3_errcode(ppDb),sqlite3_errmsg(ppDb),__LINE__);
sqlite3_free(errmsg);
return -1;
}
printf("查找成功\n");
}
//单个信息查询回调函数
int callback(void *arg,int n,char **msgtext,char **msgtable)
{
for(int i=0;i<n;i++)
{
printf("%s\t",*(msgtable+i));
}
putchar(10);
for(int j=0;j<n;j++)
{
printf("%s\t",*(msgtext+j));
}
putchar(10);
return 0;
}
//全部信息查询回调函数
int show_all(void *arg,int n,char **msgtext,char **msgtable)
{
int i,j;
if(*((int *)arg)==0)
{
for(j=0;j<n;j++)
{
printf("%s\t",*(msgtable+j));
}
*((int *)arg)=1;
putchar(10);
}
for(i=0;i<n;i++)
{
printf("%s\t",*(msgtext+i));
}
putchar(10);
return 0;
}
//方法一:通过回调函数,全部信息查询
int do_showall(sqlite3 *ppDb)
{
char *errmsg =NULL;
char sqlite[100]="select * from work;";
int flag=0;
if(sqlite3_exec(ppDb,sqlite,show_all,&flag,&errmsg)!=0)
{
perror("sqlite3_exec");
printf("错误码:%d 错误信息:%s ,错误行是:%d\n",sqlite3_errcode(ppDb),sqlite3_errmsg(ppDb),__LINE__);
sqlite3_free(errmsg);
return -1;
}
return -1;
}
//方法二:通过sqlite3_get_table函数实现全部信息查询
int do_allshow(sqlite3 *ppDb)
{
char **errmsg =NULL;
char sqlite[100]="select * from work;";
char **pazRuselt;
int rnpow;
int rncolumn;
if(sqlite3_get_table(ppDb,sqlite,&pazRuselt,&rnpow,&rncolumn,errmsg)!=SQLITE_OK)
{
perror("sqlite3_exec");
printf("错误码:%d 错误信息:%s ,错误行是:%d\n",sqlite3_errcode(ppDb),sqlite3_errmsg(ppDb),__LINE__);
sqlite3_free(errmsg);
errmsg=NULL;
return -1;
}
int i,j;
for(i=0;i<rnpow;i++)
{
for(j=0;j<rncolumn;j++)
{
printf("%s\t",*(pazRuselt+i*rncolumn+j));
}
putchar(10);
}
sqlite3_free_table(pazRuselt);
return 0;
}
//删除行信息
int do_delete(sqlite3 *ppDb)
{
char *errmsg =NULL;
char user[20];
printf("请输入要删除的人姓名:");
scanf("%s",user);
char sqlite[100];
snprintf(sqlite,sizeof(sqlite),"delete from work where name=\'%s\';",user);
if(sqlite3_exec(ppDb,sqlite,NULL,NULL,&errmsg)!=0)
{
perror("sqlite3_exec");
printf("错误码:%d 错误信息:%s ,错误行是:%d\n",sqlite3_errcode(ppDb),sqlite3_errmsg(ppDb),__LINE__);
sqlite3_free(errmsg);
return -1;
}
printf("修改成功\n");
return -1;
}
//修改信息
int do_find(sqlite3 *ppDb)
{
Worker work;
char *errmsg =NULL;
char user[20];
int a;
char sqlite[100];
printf("1、工号\n");
printf("2、姓名\n");
printf("3、薪水\n");
printf("请输入选择要修改的信息:");
scanf("%d",&a);
switch(a)
{
case 1:
printf("请输入该人姓名:");
scanf("%s",work.name);
getchar();
printf("请输入该人新ID:");
scanf("%d",&work.ID);
snprintf(sqlite,sizeof(sqlite),"UPDATE work SET ID=%d WHERE name=\'%s\';",work.ID,work.name);
break;
case 2:
printf("请输入该人ID:");
scanf("%d",&work.ID);
printf("请输入该人要修改的名字");
scanf("%s",work.name);
snprintf(sqlite,sizeof(sqlite),"update work set name=\'%s\' where ID=%d;",work.name,work.ID);
break;
case 3:
printf("请输入该人ID:");
scanf("%d",&work.ID);
printf("请输入该人要修改的薪资:");
scanf("%lf",&work.salary);
snprintf(sqlite,sizeof(sqlite),"update work set salary=%lf where ID=%d;",work.salary,work.ID);
break;
default:
printf("信息输入有误\n");
}
if(sqlite3_exec(ppDb,sqlite,NULL,NULL,&errmsg)!=0)
{
perror("sqlite3_exec");
printf("错误码:%d 错误信息:%s ,错误行是:%d\n",sqlite3_errcode(ppDb),sqlite3_errmsg(ppDb),__LINE__);
sqlite3_free(errmsg);
return -1;
}
printf("修改成功\n");
return -1;
}
//数据库退出
int do_exit(sqlite3 *ppDb)
{
char *errmsg =NULL;
char user[20];
char sqlite[100];
snprintf(sqlite,sizeof(sqlite),"delete from work where name=\'%s\';",user);
if(sqlite3_exec(ppDb,sqlite,NULL,NULL,&errmsg)!=0)
{
perror("sqlite3_exec");
printf("错误码:%d 错误信息:%s ,错误行是:%d\n",sqlite3_errcode(ppDb),sqlite3_errmsg(ppDb),__LINE__);
sqlite3_free(errmsg);
return -1;
}
printf("修改成功\n");
return -1;
}
void factory(sqlite3 *ppDb)
{
int a;
printf("\t\t*********工厂*********\n");
printf("\t\t1、插入工人信息\n");
printf("\t\t2、删除工人信息\n");
printf("\t\t3、修改工人信息\n");
printf("\t\t4、查找工人信息\n");
printf("\t\t5、输出所以工人信息\n");
printf("\t\t0、退出\n");
printf("你的选择>>>>");
scanf("%d",&a);
getchar();
switch(a)
{
case 1:do_insert(ppDb);
break;
case 2:do_delete(ppDb);
break;
case 3:do_find(ppDb);
break;
case 4:do_reseach(ppDb);
break;
case 5:do_allshow(ppDb);
do_showall(ppDb);
break;
case 0:do_exit(ppDb);
break;
default:
printf("信息输入有误\n");
}
}
int main(int argc, const char *argv[])
{
sqlite3 *ppDb;
int k=sqlite3_open("./factory.db",&ppDb);
if(k!=SQLITE_OK)
{
perror("sqlite3_open");
printf("错误码:%d 错误信息:%s ,错误行是:%d\n",sqlite3_errcode(ppDb),sqlite3_errmsg(ppDb),__LINE__);
return -1;
}
printf("数据库打开成功\n");
char *errmsg=NULL;
char sqlite[100] = "create table if not exists work(ID int,name char ,salary double);";
if(sqlite3_exec(ppDb,sqlite,NULL,NULL,&errmsg)!=0)
{
perror("sqlite3_exec");
printf("错误码:%d 错误信息:%s ,错误行是:%d\n",sqlite3_errcode(ppDb),sqlite3_errmsg(ppDb),__LINE__);
sqlite3_free(errmsg);
errmsg=NULL;
return -1;
}
while(1)
{
factory(ppDb);
}
sqlite3_close(ppDb);
return 0;
}
sqlite3数据库使用
最新推荐文章于 2024-09-21 14:33:15 发布