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 协议》,转载必须注明作者和本文链接