c操作sqlite3常用的方法 | 数据库论坛-大发黄金版app下载

#include  <stdio.h>
#include  "../include/sqlite3.c"
// sqlite3 返回的结果集是一个一维数组,范围是result[0]到result[column   row * column-1]
// 其中result[0]到result[column -1]是列名
// result[column]到result[column   row * column -1]是实际的数据集合
// 所以取某个值,可以用result[ j  i * column]  i表示行号,j表示列号
// data 是sqlite3_exec第四个参数传的指针
// argc 表示查询结果集的列数
// argv 表示查询结果集合每行的列指
// azcolname 表示查询结果及的列名【数据表对应字段名】
static  int  callback(void *data, int  argc, char **argv, char **azcolname)
{
 int  i;
 // 标准错误输出 stderr
 // 标准控制台数组 stdout
 fprintf(stdout, "%s:\n", (const  char *)data);
 printf("number of columns: %d\n", argc);
 for (i = 0; i < argc; i) // argc:结果字段的个数
    {
 // azcolname:结果字段的名称,  argv:字符数组指
 printf("%s = %s\n", azcolname[i], argv[i] ? argv[i] : "null");
    }
 printf("\n");
 return  0;
}
void  do_show_sample(sqlite3 *db)
{
 char **result, *errmsg;
 int  nrow, ncolumn;
 char *sql = "select * from score";
 // db 数据库句柄
 // sql 要执行的sql语句
 // result 结果集
 // nrow 结果集的行数
 // ncolumn 结果集的列数
 // errmsg 错误信息
 if (sqlite3_get_table(db, sql, &result, &nrow, &ncolumn, &errmsg) != sqlite_ok)
    {
 printf("sql error: %s\n", errmsg);
 sqlite3_free(errmsg);
 return;
    }
 printf("number of rows: %d, number of columns: %d\n", nrow, ncolumn);
 // 返回的结果是一个一维数组,范围是result[0]到result[column   row * column-1]
 // 其中result[0]到result[column -1]是列名
 // result[column]到result[column   row * column -1]是实际的数据集合
 // 所以取某个值,可以用result[ j  i * column]  i表示行号,j表示列号
 for (size_t  i = 0; i <= nrow; i) // 由于数组的前面是列名,所以这里需要写成 <=
    {
 for (size_t  j = 0; j < ncolumn; j)
        {
 printf("%s:%s\n", result[j], result[i * ncolumn  j] ? result[i * ncolumn  j] : "null");
        }
 printf("**********************************************\n");
    }
 sqlite3_free_table(result);
 return;
}
int  main()
{
 const  char *sql = "select * from score";
 char *errmsg = 0;
 int  ret = 0;
 const  char *data = "callback function called";
 // 打开数据库
 sqlite3 *db = 0;
 ret = sqlite3_open("test4.db", &db);
 if (ret != sqlite_ok)
    {
 fprintf(stderr, "cannot open db: %s\n", sqlite3_errmsg(db));
 return  1;
    }
 printf("open database\n");
 // 不使用回调函数执行sql语句
 do_show_sample(db);
 // 执行sql语句
 // ret = sqlite3_exec(db, sql, null, null, &errmsg);
 // (void *data, int argc, char **argv, char **azcolname)
 ret = sqlite3_exec(db, sql, callback, (void *)data, &errmsg);
 if (ret != sqlite_ok)
    {
 fprintf(stderr, "sql exec fail: %s\n", errmsg);
    }
 sqlite3_free(errmsg);
 // 关闭数据库
 sqlite3_close(db);
 printf("close database\n");
 return  0;
}

// 常用的这几个函数

// sqlite3_open 打开数据库

// sqlite3_close 关闭数据库

// sqlite3_exec 执行sql语句

// sqlite3_errmsg 获取错误信息

// sqlite3_get_table 获取查询结果集

// sqlite3_free 释放错误信息

// sqlite3_free_table 释放查询结果集

本作品采用《cc 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
15
粉丝
0
喜欢
9
收藏
27
排名:1443
访问:2516
博客标签
社区赞助商
网站地图