C操作sqlite3常用的方法

#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
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!