Linux系统的数据库编程举例

sqlite3_exec.c()函数的简单应用

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

/*
    exec每找到一条记录,都会 调用该函数, 通过将记录 通过参数传给形参变量
*/
int  sqlite3_cb_fun(void *para, int f_num, char **f_value, char **f_name)
{
    int i;
    static int cnt = 0;

    if(cnt++ == 0) {
        for(i=0;i<f_num;i++){
            printf("%12s",f_name[i]);
        }

        printf("\n");
    }

    for(i=0;i<f_num;i++){
        printf("%12s",f_value[i]);
    }
    printf("\n");
    return 0;   //表示成功
}

int main(int argc,char **argv)
{
    int ret;

    sqlite3 *db;
    /*
        #include <sqlite3.h>
        int sqlite3_open(char *path, sqlite3 **db);
        功能:打开sqlite数据库
        path: 数据库文件路径
        db: 指向sqlite句柄的指针
        返回值:成功返回0,失败返回错误码
     char *sqlite3_errmsg(sqlite3 *db);
    */

    ret = sqlite3_open("./school.db", &db);
    if(ret){
        printf("open err:%s\n",sqlite3_errmsg(db));
        return -1;
    }

    /*

    执行sql语句,返回结果
    ---方法1:
        --工作过程,去执行sql指定的语句,每发现一个匹配记录,回调函数被调用一次. 

        int sqlite3_exec(sqlite3 *db, const char *sql, 
            sqlite3_callback callback,
                void *args, char **errmsg);

        ----sql: SQL语句,比如"select * from table;  
            注意""在sql中不可忽略,snprintf("___   \"xx\"  ____ ")
        ----callback:回调函数,有的sql不需要回调函数,置NULL即可.
        ----errmsg:错误信息指针的地址
        ----返回值:成功返回0,失败返回错误码

        typedef int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name)
            --f_num:返回结果的 列的个数/每条记录属性的个数.
            --f_value: 一个字符串数组,分别是 每个属性的值.
            --f_name:  一个字符串数组, 表示每个属性的名字


    */

    ret = sqlite3_exec(db,"select * from student;", 
                sqlite3_cb_fun,NULL,NULL);
    if(ret){
        printf("sqlite3_exec err:%s\n",sqlite3_errmsg(db));
        return -1;
    }
    /*
    int sqlite3_close(sqlite3 *db);
    功能:关闭sqlite数据库
    返回值:成功返回0,失败返回错误码


    */
    ret = sqlite3_close( db);
    if(ret){
        printf("close err:%s\n",sqlite3_errmsg(db));
        return -1;
    }

    /*
        printf("pls input name id home age num:");
        scanf("%s %d %s %d %d",name,&id,home,&age,&num);
        insert into student (name,id,home,age,num) values ();
        sprintf(buf,
    "insert into student (name,id,home,age,num,sex) values (\"%s\",%d,\"%s\",%d,%d,\'%c\');",
        name,id,home,age,num);
    结果是
         insert into student (name,id,home,age,num) values (xiaoming,2356,chogqing qijiang,23,2568,M); 
        字符串和字符都需要 加上 "" ''   

    */
}

sqlite3_get_table.c()函数的简单应用

#include <stdio.h>
#include <sqlite3.h>
/*
    exec没找到一条记录,都会 调用该函数, 通过将记录 通过参数传给你
*/
int  sqlite3_cb_fun(void *para, int f_num, char **f_value, char **f_name)
{
    int i;
    static int cnt = 0;
    if(cnt++ == 0) {
        for(i=0;i<f_num;i++){
            printf("%12s",f_name[i]);
        }
        printf("\n");
    }
    for(i=0;i<f_num;i++){
        printf("%12s",f_value[i]);
    }
    printf("\n");
    return 0;   //表示成功
}
int main(int argc,char **argv)
{
    int ret;
    int i;
    char buf[128];
    sqlite3 *db;
    int nrow;
    int ncolum;
    char **resultp;
    /*
        #include <sqlite3.h>
        int sqlite3_open(char *path, sqlite3 **db);
        功能:打开sqlite数据库
        path: 数据库文件路径
        db: 指向sqlite句柄的指针
        返回值:成功返回0,失败返回错误码
     char *sqlite3_errmsg(sqlite3 *db);
    */
    ret = sqlite3_open("./school.db", &db);
    if(ret){
        printf("open err:%s\n",sqlite3_errmsg(db));
        return -1;
    }
    /*
    执行sql语句,返回结果
    ---方法1:
        --工作过程,去执行sql指定的语句,每发现一个匹配记录,回调函数被调用一次. 

        int sqlite3_exec(sqlite3 *db, const char *sql, 
            sqlite3_callback callback,
                void *args, char **errmsg);

        ----sql: SQL语句,比如"select * from table;  
            注意""在sql中不可忽略,snprintf("___   \"xx\"  ____ ")
        ----callback:回调函数,有的sql不需要回调函数,置NULL即可.
        ----errmsg:错误信息指针的地址
        ----返回值:成功返回0,失败返回错误码

        typedef int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name)
            --f_num:返回结果的 列的个数/每条记录属性的个数.
            --f_value: 一个字符串数组,分别是 每个属性的值.
            --f_name:  一个字符串数组, 表示每个属性的名字
    */
#if   0
    sprintf(buf,"select * from student;");

    ret = sqlite3_exec(db,buf, 
                sqlite3_cb_fun,NULL,NULL);
    if(ret){
        printf("sqlite3_exec err:%s\n",sqlite3_errmsg(db));
        return -1;
    }
#endif
    /*
    执行sql语句方法二:
    int sqlite3_get_table(sqlite3 *db, const char *sql, 
        char***resultp, int*nrow, int *ncolumn, char **errmsg);

    sql: SQL语句
    resultp:用来指向sql执行结果,是一个 一维字符串数组(nrow+1)行*ncolumn列
    nrow:满足条件的记录的数目
    ncolumn:每条记录包含的字段数目
    返回值:成功返回0,失败返回错误码
    */

    ret = sqlite3_get_table(db, "select * from student;", 
        &resultp, &nrow, &ncolum, NULL);
    if(ret){
        printf("sqlite3_get_table err:%s\n",sqlite3_errmsg(db));
        return -1;
    }
    /*原来resultp是一个两重指针
    */
    for(i=0;i< (nrow+1)*ncolum ;i++){
        printf("%12s",resultp[i]);
        if( (i+1)% ncolum == 0){
            printf("\n");
        }
    }
    /*
    int sqlite3_close(sqlite3 *db);
    功能:关闭sqlite数据库
    返回值:成功返回0,失败返回错误码
    */
    ret = sqlite3_close( db);
    if(ret){
        printf("close err:%s\n",sqlite3_errmsg(db));
        return -1;
    }
    /*
        printf("pls input name id home age num:");
        scanf("%s %d %s %d %d",name,&id,home,&age,&num);
        "insert into student (name,id,home,age,sex) values ("xiaowang",23,32,'M');"
        sprintf(buf,
    "insert into student (name,id,home,age,num,sex) values (\"%s\",%d,\"%s\",%d,%d,\'%c\');",
        name,id,home,age,num);
    结果是
         insert into student (name,id,home,age,num) values (xiaoming,2356,chogqing qijiang,23,2568,M); 
        字符串和字符都需要 加上 "" ''   
    */
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值