【0816作业】Linux中数据库的增删改查代码、将字典写入到数据库中

本文详细介绍了在Linux环境下使用SQLite进行数据库的基本操作,包括增加、删除、修改和查询记录,以及如何将字典内容dict.txt加载到数据库中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Linux中数据库的增删改查

1)增加

        ① 代码

int do_insert(sqlite3 *db)
{
    //输入要插入的数据
    int id;
    char name[20]="";
    float score;

    printf("请输入id>>> ");
    scanf("%d",&id);
    getchar();

    printf("请输入name>>> ");
    scanf("%s",name);
    getchar();

    printf("请输入score>>> ");
    scanf("%f",&score);
    getchar();

    //将输入的数据与sql命令拼接起来
    char sql[128]="";
    sprintf(sql,"insert into stu values(%d,\"%s\",%g)",id,name,score);

    //执行命令
    char *errmsg = NULL;
    if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK)
    {
        fprintf(stderr,"__%d__sqlite3_exec:%s\n",__LINE__,errmsg);
        return -1;                                                               
    }
    printf("insert into stu success \n");

    return 0;
}

        ② 效果

2)删除

        ① 代码

        ② 效果

3)修改

        ① 代码

        ② 效果

4)查询

        ① 代码(2种方法)

int select_callBack(void* arg,int column,char **column_text,char **column_name)
{
    //查询结果的列数
    //printf("column= %d __%d__\n",column,__LINE__);

    //表头
    if(0 == *(int*)arg)
    {
        for(int i=0;i<column;i++)
        {
            printf("%s\t",column_name[i]);
        }
        putchar(10);
        *(int *)arg=1;
    }
    //查询到的内容
    for(int i=0;i<column;i++)
    {
        printf("%s\t",column_text[i]);
    }
    putchar(10);

    return 0;
    //该返回值返回给sqlite3_exec,若不返回0,
    //则会让sqlite3_exec函数认为当前函数执行失败,
    //从而导致sqlite3_exec函数执行失败
}
/*
//查询
int do_select(sqlite3 *db)
{
    char sql[128]="select * from stu";
    char *errmsg = NULL;
    
    int flag=0;
    if(sqlite3_exec(db,sql,select_callBack,&flag,&errmsg) != SQLITE_OK)
    {
        fprintf(stderr,"__%d__sqlite3_exec:%s\n",__LINE__,errmsg);
        return -1;
    }
    printf("select stu success \n");
}
*/

//查询
int do_select(sqlite3 *db)
{
    char sql[128]="select * from stu";                                             
    char** pres=NULL;
    int row,column;
    char *errmsg = NULL;

    if(sqlite3_get_table(db,sql,&pres,&row,&column,&errmsg) != SQLITE_OK)
    {
        fprintf(stderr,"__%d__sqlite3_exec:%s\n",__LINE__,errmsg);
        return -1;
    }
    printf("select stu success \n");
    printf("row=%d column=%d\n",row,column);

    //结果中包含表头的那一行,所以打印的时候要+1
    for(int i =0;i<(row+1)*column;i++)
    {
        printf("%s\t",pres[i]);
        if((i+1)%column == 0)
            putchar(10);
    }
    printf("==================\n");

    int index = 0;
    for(int i=0;i<row+1;i++)
    {
        for(int j=0;j<column;j++)
        {
            printf("%s\t",pres[i*column+j]);
        }
        putchar(10);
    }
    //释放查询到的结果
    sqlite3_free_table(pres);

    return 0;
}

        ② 效果

 

5)总代码

        ① 代码

        ② 效果

二、字典dict.txt上传到数据库中

① 代码

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sqlite3.h>

int do_insert(sqlite3 *db,char *word,char *mean);

int main(int argc, const char *argv[])
{
    //以读的方式打开文件
    FILE* fp=fopen("./dict.txt","r");
    if(NULL == fp)
    {
        perror("fopen");
        return -1;
    }
    printf("fopen success\n");

    //创建并打开一个数据库
    sqlite3 *db = NULL;
    if(sqlite3_open("./dict.db",&db) != SQLITE_OK)
    {
        fprintf(stderr,"sqlite3_open:%s %d __%d__\n",\
                sqlite3_errmsg(db),sqlite3_errcode(db),__LINE__);
        return -1;
    }
    printf("open database my.db success\n");

    //创建一个表格 create table dict(word char,mean char);
    //数据库中sql语句怎么写 这里就怎么写                                      
    char sql[128] = "create table if not exists dict(word char,mean char)";
    char *errmsg = NULL;

    if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK)
    {
        fprintf(stderr,"sqlite3_exec:%s %d __%d__\n",errmsg,sqlite3_errcode(db
        return -1;
    }
    printf("create table dict success\n");

    //定义存放数据的数组
    char buf[128]="";
    char word[64]="";
    char mean[64]="";
    char *res=NULL;
    while(1)
    {
        bzero(buf,sizeof(buf));
        bzero(word,sizeof(word));
        bzero(mean,sizeof(mean));

        res=fgets(buf,sizeof(buf),fp);
        if(NULL == res)
        {
            printf("读取完毕\n");
            break;
        }

        char *p=buf;
        char *wordp=word;
        char *meanp=mean;

        while(*p !=' ' || *(p+1) != ' ')
        {
            if(*p=='\'')
            {
                *wordp++ ='\'';
                p++;
                continue;
            }
            *wordp++ = *p++;
            //printf("%c\n",*p);
        }

        while(*p ==' ')
            p++;

        while(*p!='\n')
        {
            *meanp++ = *p++;
        }
        do_insert(db,word,mean);
    }


    //关闭数据库
    if(sqlite3_close(db) != SQLITE_OK)
    {
        fprintf(stderr,"sqlite3_close:%s %d __%d__\n",\
                sqlite3_errmsg(db),sqlite3_errcode(db),__LINE__);
        return -1;
    }
    printf("close database my.db success\n");

    return 0;
}

int do_insert(sqlite3 *db,char *word,char *mean)
{
    char sql[128]="";
    sprintf(sql,"insert into dict values(\"%s\",\"%s\")",word,mean);

    //执行命令
    char *errmsg = NULL;
    if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK)
    {
        fprintf(stderr,"__%d__sqlite3_exec:%s\n",__LINE__,errmsg);
        return -1;
    }
    printf("insert into dict success \n");

    return 0;
}

② 结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值