day2-sqlite3下

sqlite3 数据库 C语言 API

int sqlite3_open(const char *filename, /* Database filename (UTF-8) * sqlite3 **ppDb /* OUT: SQLite db handle */

);

功能:打开数据库

参数:filename 数据库名称

ppdb 数据库句柄

返回值:成功为0 SQLITE_OK ,出错 错误码

int sqlite3_close(sqlite3* db);

功能:关闭数据库

参数:

返回值:成功为0 SQLITE_OK ,出错 错误码

const char *sqlite3_errmsg(sqlite3*db);

功能:得到错误信息的描述

int sqlite3_exec(

sqlite3* db, /* An open database */

const char *sql, /* SQL to be evaluated */

int (*callback)(void* arg,int,char**,char**), /* Callback function */

void * arg, /* 1st argument to callback */

char **errmsg /* Error msg written here */

);

功能:执行一条sql语句

参数:db 数据库句柄

sql sql语句

callback 回调函数,只有在查询时,才传参

arg 为回调函数传递参数

errmsg 错误消息

返回值:成功 SQLITE_OK

查询回调函数:

int (*callback)(void* arg,int ncolumns ,char** f_value,char** f_name), /* Callback function */

功能:查询语句执行之后,会回调此函数

参数:arg 接收sqlite3_exec 传递来的参数

ncolumns 列数

f_value 列的值得地址

f_name 列的名称

返回值:0,

int sqlite3_get_table(

sqlite3 *db, /* An open database */

const char *zSql, /* SQL to be evaluated */

char ***pazResult, /* Results of the query */

int *pnRow, /* Number of result rows written here */

int *pnColumn, /* Number of result columns written here */

char **pzErrmsg /* Error msg written here */

);

void sqlite3_free_table(char **result);

代码示例

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

#define DATABASE "stu.db"

int do_insert(sqlite3 *db){
    int id;
    char name[32] = {};
    int score;
    char sql[128] = {};
    char *errmsg;
    printf("Input id:");
    scanf("%d",&id);
    getchar();
    
    printf("Input name:");
    scanf("%s",name);
    getchar();
    
    printf("Input score:");
    scanf("%d",&score);
    getchar();

    //使用sprintf拼接
    sprintf(sql,"insert into stu values(%d,'%s',%d);",id,name,score);
    if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK){
        printf("%s\n",errmsg);
        return -1;
    }else{
        printf("insert done\n");
    }
    return 0;
    
}
int do_delete(sqlite3 *db){
    int id;
    char sql[128] = {};
    char *errmsg;
    printf("Input id:");
    scanf("%d",&id);
    getchar();
    
    //使用sprintf拼接
    sprintf(sql,"delete from stu where id = %d",id);
    if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK){
        printf("%s\n",errmsg);
        return -1;
    }else{
        printf("delete done\n");
    }
    return 0;
    
}

int callback(void *arg,int ncolumns,char **f_value,char ** f_name){
    int i;
    for(i=0;i<ncolumns;i++){
        printf("%-8s",f_value[i]);
    }
    puts("");
    return 0;
}

int do_query(sqlite3 *db){
    char sql[128] = {};
    char *errmsg;
    
    //使用sprintf拼接
    strcpy(sql,"select * from stu;");
    if(sqlite3_exec(db,sql,callback,NULL,&errmsg)!=SQLITE_OK){
        printf("%s\n",errmsg);
        return -1;
    }else{
        printf("query done\n");
    }
    return 0;
    
}

int do_query1(sqlite3 * db){    
    char sql[128] = {};
    char *errmsg;
    char **pazResult;
    int nrow;
    int ncolumns;
    
    //使用sprintf拼接
    strcpy(sql,"select * from stu;");
    if(sqlite3_get_table(db,sql,&pazResult,&nrow,&ncolumns,&errmsg)!=SQLITE_OK){
        printf("%s\n",errmsg);
        return -1;
    }else{
        printf("query done\n");
    }

    int i = 0;
    int j = 0;
    int index = ncolumns;
    for(;i<ncolumns;i++){
        printf("%-8s",pazResult[i]);
    }
    puts("");
    for(i=0;i<nrow;i++){
        for(j=0;j<ncolumns;j++){
            printf("%-8s",pazResult[index++]);
        }
        puts("");
    }

    return 0;
}

int do_update(sqlite3 *db){
    int id;
    char name[32] = {};
    int score;
    char sql[128] = {};
    char *errmsg;
    printf("Input id:");
    scanf("%d",&id);
    getchar();
    
    printf("Input name:");
    scanf("%s",name);
    getchar();
    
    printf("Input score:");
    scanf("%d",&score);
    getchar();

    //使用sprintf拼接
    sprintf(sql,"update stu set name = '%s',score = %d where id = %d",name,score,id);
    if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK){
        printf("%s\n",errmsg);
        return -1;
    }else{
        printf("update done\n");
    }
    return 0;    
}

int main(int argc, char *argv[])
{
    sqlite3 *db;
    char * errmsg;
    if(sqlite3_open(DATABASE,&db)!= SQLITE_OK){
        printf("%s",sqlite3_errmsg(db));
        return -1;
    }
    else{
        printf("Open DATABASE success.\n");
    }

    //创建一张数据表 
    if(sqlite3_exec(db,"create table stu(id Integer,name char,score Integer);",NULL,NULL,&errmsg)!=SQLITE_OK){
        printf("%s\n",errmsg);
    }
    else{
        printf("create table success\n");
    }
    int cmd;
    while(1){
        printf("---------------------------------------------\n");
        printf("1.insert  2.delete  3.query  4.update  5.quit\n");
        printf("---------------------------------------------\n");
        printf("input cmd: ");
        scanf("%d",&cmd);
        getchar();
        switch(cmd){
            case 1:
                do_insert(db);
                break;
            case 2:
                do_delete(db);
                break;
            case 3:
                do_query1(db);
                break;
            case 4:
                do_update(db);
                break;
            case 5:
                sqlite3_close(db);
                exit(0);
            default:
                printf("err cmd\n");
        }

    }


    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值