c语言中sqlite3的使用方法

        在学习完tcp通信之后又了解了sqlite3的的功能,以及c语言中sqlite3的使用方法,接下来我将介绍c语言中sqlite3的使用方法。

        首先需保证机器上已经有SQLITE库,下图是在虚拟机上安装过程

c语言中sqlite3的使用方法_第1张图片

         安装好SQLITE库后就可以使用sqlite命令语句。例如:

1.sqlite3_open

c语言中sqlite3的使用方法_第2张图片

 

2sqlite3_exec

c语言中sqlite3的使用方法_第3张图片

c语言中sqlite3的使用方法_第4张图片 

 

3.sqlite3_get_table

c语言中sqlite3的使用方法_第5张图片

 

4.sqlite_close

c语言中sqlite3的使用方法_第6张图片

        学会使用这些语句,就可以写一个简单的学生库,存有学生的id、姓名、成绩,以及对这些数据的增删改查。以下是我自己写程序,供大家参考。

#include
#include
#include
#include
//数据库保存学生的信息
#define N 20
typedef struct student
{
    int id;
    char name[N];
    float score;
}stu;

void menu(void)
{
    printf("1----------insert\n");
    printf("2----------select\n");
    printf("3----------update\n");
    printf("4----------delete\n");
    printf("-1-----------exit\n");
}

//编写子函数,实现打开数据库和创建表
//参数1:数据库名    char * 参数2:表名
//返回值:打开数据库连接对象
sqlite3 * sql_open(char * dbname)
{
    sqlite3 * db = NULL;
    //1.打开数据库   test.db
    //参数1:数据库的名称  参数2:sqlite3 **通过入参的形式将数据库的连接对象给db
    int rc = sqlite3_open(dbname,&db);
    if(rc != SQLITE_OK) //SQLITE_OK 为0
    {
        perror("sqlite3 open error");
        return NULL;
    }
    printf("sqlite3 open ok\n");
    return db;
}
int create_table(sqlite3 *db,char *tbname)
{
    //创建表 stu
    char sql[100] = {'\0'};
    sprintf(sql,"create table %s (id int primary key not null,name text,score float)",tbname);
    printf("%s\n",sql);
    //参数1:sqlite3 *
    //参数2:sql语句
    //参数3和4NULL
    //参数5:char ** errmsg
    char * errmsg = NULL;
    int rc = sqlite3_exec(db,sql,NULL,NULL,&errmsg);

    if(rc != SQLITE_OK)
    {
        if(strcmp(errmsg,"table stu already exists") != 0 )
        {
            printf("%s\n",errmsg);
            return     -1;
        }
    }
    printf("create ok\n");

    return 0;
}


//编写子函数,给数据库中插入
//参数1:数据库连接对象
//参数2:表名
//返回值:成功返回0,失败返回-1
int insert_data(sqlite3 * db,char * tbname)
{
    stu s1 = {1,"zhangsan",89};
    printf("请输入学生的信息\n");
    scanf("%d%s%f",&s1.id,s1.name,&s1.score);
    char sql[100] = {'\0'};
    sprintf(sql,"insert into %s values(%d,'%s',%.1f)",tbname,s1.id,s1.name,s1.score);
    printf("%s\n",sql);
    int rc = 0;
    char *errmsg = NULL;
    rc = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
    if(rc != SQLITE_OK)
    {
        perror("insert error");
        return     -1;
    }
    printf("insert ok\n");
    return 0;
}

//函数功能:查询的回调函数
//参数1:void * data给回调函数传递的参数
//参数2:int colum_num记录中包含的子段数目(几列就是几)
//参数3:char ** // char * colum_value[]
//参数4:char **  //char colum_name[]
int callback(void * data,int colum_num,char * colum_value[],char * colum_name[])
{
    int i = 0;
    stu s1;
    memset(&s1,'\0',sizeof(s1));
    s1.id = atoi(colum_value[0]);
    strcpy(s1.name,colum_value[1]);
    s1.score = atof(colum_value[2]);
    printf("%5d%10s%7.1f\n",s1.id,s1.name,s1.score);
    printf("\n");
    return 0;
}

//函数功能:查看元素
//参数1:数据库连接对象sqlite3 *db
//参数2:表名 char *tbname
//返回值:成功返回0,失败返回-1
int select_data(sqlite3 *db,char * tbname)
{
    char sql[100] = "select * from stu";
    sprintf(sql,"select *from %s",tbname);
    char * errmsg = NULL;
    //参数1:连接对象sqlite3 *db
    //参数2:sql语句
    //参数3:回调函数 函数的指针  //select
    //参数4:给回调函数传参
    int ret = sqlite3_exec(db,sql,callback,NULL,&errmsg);
    if(ret != SQLITE_OK)
    {
        fprintf(stderr,"select error:%s\n",errmsg);
        return -1;
    }
    printf("select ok!\n");
    return 0;
}


//函数功能:从数据库更改元素内容
//参数1:数据库连接对象sqlite3 *db
//参数2:表名          char * tbname
//参数3:学号          float score
//参数4:姓名          char * name
//返回值: 更新成功返回0,失败返回-1
int update_data(sqlite3 * db,char *tbname,float score,char * name)
{
    char sql[50] = "update stu set score = 96 where name = 'zhangsan'";
    sprintf(sql,"update %s set score = %.1f where name = '%s'",tbname,score,name);
    printf("%s\n",sql);
    //参数1:sqlite3 * db
    //参数2:sql语句
    //参数3:NULL
    //参数4:NULL
    char * errmsg = NULL;
    //参数5:char ** errmsg;
    int rc = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
    if(rc != SQLITE_OK)
    {
        perror("update error");
        return     -1;
    }
    printf("update ok\n");
    return 0;
}

//函数功能:从数据库删除元素
//参数1:数据库连接对象sqlite3 *db
//参数2:表名          char * tbname
//参数3:学号          int id
//返回值:删除成功返回0,失败返回-1
int delete_data(sqlite3 * db,char * tbname,int id)
{
    char sql[50] = "delete from stu where id = 1";
    sprintf(sql,"delete from %s where id = %d",tbname,id);
    printf("%s\n",sql);
    //参数1:sqlite3 * db
    //参数2:sql语句
    //参数3:NULL
    //参数4:NULL
    char * errmsg = NULL;
    //参数5:char ** errmsg;
    int rc = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
    if(rc != SQLITE_OK)
    {
        perror("delete error");
        return     -1;
    }
    printf("delete ok\n");
    return 0;
    
}
int main(void)
{
    sqlite3 * db;
    int id;
    float score;
    char tbname[20] = "stu";
    char name[10] = {'\0'};
    //1.打开数据库并创建表
    db = sql_open("test.db"); 
    create_table(db,tbname);
    //对表进行insert select delete update
    int op = 0;
    while(1)
    {
        menu();
        printf("请输入选项\n");
        scanf("%d",&op);
        if(op == -1)
            break;
        switch(op)
        {
            case 1:
                    insert_data(db,"stu");
                    break;
            case 2:
                    printf("请输入想查询的表名\n");
                    scanf("%s",tbname);
                    select_data(db,tbname);
                    break;
            case 3:    
                    printf("请输入表名及修改后的成绩和想修改人的姓名\n");
                    scanf("%s",tbname);
                    scanf("%f",&score);
                    scanf("%s",name);
                    update_data(db,tbname,score,name);
                    break;
            case 4:
                    printf("请输入想删除的表名和学号\n");
                    scanf("%s",tbname);
                    scanf("%d",&id);
                    delete_data(db,tbname,id);
                    break;
        }
    }
    return 0;
}
 

 

你可能感兴趣的:(1024程序员节)