9.10 SQLITE3数据库

cs 复制代码
#include <myhead.h>
#include <sqlite3.h>

typedef struct
{
    int num;
    char name[20];
    double salary;
} Worker;
int callback(void *arg, int n, char **msgtext, char **msgtable)
{
    int i, j;
    for (i = 0; i < n; i++)
    {
        printf("%s\t", *(msgtable + i));
    }
    printf("\n");
    for (j = 0; j < n; j++)
    {
        printf("%s\t", *(msgtext + j));
    }
    printf("\n");
    printf("查找成功\n");
    return 0;
}

int do_delete(sqlite3 *ppDb)
{
    int key;
    printf("请输入要删除的工号:");
    scanf("%d", &key);
    char *errmsg = NULL; //储存错误信息
    char sqlite[100];
    snprintf(sqlite, sizeof(sqlite), "delete from Work where num==%d;", key);
    if (sqlite3_exec(ppDb, sqlite, NULL, NULL, &errmsg) != 0)
    {
        perror("sqlite3_exec");
        return -1;
    }
    printf("删除成功\n");
}
int do_insert(sqlite3 *ppDb)
{
    Worker work;
    printf("请输入要插入的工号:");
    scanf("%d", &work.num);
    printf("请输入要插入的姓名:");
    scanf("%s", work.name);
    printf("请输入要插入的工资:");
    scanf("%lf", &work.salary);
    char *errmsg = NULL; //储存错误信息
    char sqlite[100];
    snprintf(sqlite, sizeof(sqlite), "insert into Work values(%d,\"%s\",%lf);", work.num, work.name, work.salary);
    printf("添加成功\n");
    if (sqlite3_exec(ppDb, sqlite, NULL, NULL, &errmsg) != 0)
    {
        perror("sqlite3_exec");
        return -1;
    }
}

int do_update(sqlite3 *ppDb)
{
    Worker work;
    char key[20];
    printf("请输入要修改的姓名:");
    scanf("%s", work.name);
    printf("请输入新的工号:");
    scanf("%d", &work.num);
    printf("请输入新的工资:");
    scanf("%lf", &work.salary);

    char *errmsg = NULL; //储存错误信息
    char sqlite[100];
    snprintf(sqlite, sizeof(sqlite), "update Work set num=%d,salary=%lf where name=\"%s\";", work.num, work.salary, work.name);
    if (sqlite3_exec(ppDb, sqlite, NULL, NULL, &errmsg) != 0)
    {
        perror("sqlite3_exec");
        return -1;
    }
    printf("修改成功\n");
}

int do_reserch(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");
        return -1;
    }
}

int show_all(void *arg, int n, char **msgtext, char **msgtable)
{
    int i, j;
    for (i = 0; i < n; i++)
    {
        printf("%s\t", *(msgtable + i));
    }
    printf("\n");
    for (j = 0; j < n; j++)
    {
        printf("%s\t", *(msgtext + j));
    }
    printf("\n");
    
    return 0;
}

int do_showall(sqlite3 *ppDb)
{
    char *errmsg = NULL;                                          //存储错误信息
    char sqlite[100] = "select * from Work";                      //输出所有工人信息
    if (sqlite3_exec(ppDb, sqlite, show_all, NULL, &errmsg) != 0) //输出所有工人信息
    {
        perror("sqlite3_exec");
        printf("错误码:%d错误信息:%s,出错行是:%d\n",
               sqlite3_errcode(ppDb), sqlite3_errmsg(ppDb), __LINE__);
        printf("错误信息:%s\n", errmsg);
        return -1;
    }
    return 0;
}

void menu(sqlite3 *ppDb)
{
    int ch;
    printf("1.插入一个工人信息\n");
    printf("2.删除一个工人信息\n");
    printf("3.修改一个工人信息\n");
    printf("4.查找一个工人信息\n");
    printf("5.显示所有工人信息\n");
    printf("0.退出\n");
    printf("请输入选项:");
    scanf("%d", &ch);
    getchar();
    switch (ch)
    {
    case 1:
        do_insert(ppDb);
        break;

    case 2:
        do_delete(ppDb);
        break;

    case 3:
        do_update(ppDb);
        break;

    case 4:
        do_reserch(ppDb);
        break;

    case 5:
        do_showall(ppDb);
        break;

    case 0:
        exit(0);
    default:
        break;
    }
}

int main(int argc, char const *argv[])
{
    sqlite3 *ppDb;
    int k = sqlite3_open("./workers.db", &ppDb);
    if (k != SQLITE_OK)
    {
        perror("sqlite3_open");
        return -1;
    }
    printf("数据库打开成功\n");
    char *errmsg = NULL;                                                                    //储存错误信息
    char sqlite[100] = "create table if not exists Work(num int,name char,salary double);"; //创建一个表格
    if (sqlite3_exec(ppDb, sqlite, callback, NULL, &errmsg) != 0)
    {
        perror("sqlite3_exec");
        return -1;
    }
    while(1)
    {
        menu(ppDb);
    }

    sqlite3_close(ppDb);
    return 0;
}
相关推荐
guangzhi06334 分钟前
JVM本地方法栈
java·jvm·面试
健康平安的活着5 分钟前
JVM 调优篇7 调优案例4- 线程溢出
jvm
懵懵懂懂程序员5 分钟前
JVM堆外泄露分析&解决
jvm
Casual_Lei18 分钟前
Neo4j
数据库·oracle·neo4j
IT枫斗者26 分钟前
集合工具类
java·linux·数据库·windows·算法·microsoft
大厂小码哥1 小时前
图解Redis 01 | 初识Redis
数据库·redis·缓存
咚咚?2 小时前
麒麟操作系统 MySQL 主从搭建
数据库·mysql
爬山算法3 小时前
Oracle(130)如何启动和关闭Oracle数据库?
数据库·oracle
天荒地老笑话么4 小时前
MySQL——数据库的高级操作(三)权限管理(1)MySQL 的权限
数据库·mysql
天荒地老笑话么7 小时前
MySQL——数据库的高级操作(二)用户管理(1)uer表
数据库·mysql