继上篇对嵌入式数据库sqlite的移植和注意项,以及使用命令行测试之后,本篇对其进行了更进一步的程序测试,以备近期在项目中使用。测试程序及说明如下:
/**************** 相关函数说明 ******************/
/* (1)sqlite3_open的函数原型说明:
int sqlite3_open
(
const char *filename, // Database filename (UTF-8)
sqlite3 **ppDb // OUT: SQLite db handle
);
*/
/* (2)sqlite3_exec的函数原型说明:
int sqlite3_exec
(
sqlite3*, // An open database
const char *sql, // SQL to be executed
sqlite_callback, // Callback function
void *, // 1st argument to callback function
char **errmsg // Error msg written here
);*/
/* (3)查询数据
int sqlite3_get_table
(
sqlite3*,
const char *sql,
char ***result, //result中是以数组的形式存放你所查询的数据,首先是表名,再是数据。
int *nrow, //nrow ,ncolumn分别为查询语句返回的结果集的行数,列数,
int *ncolumn, //没有查到结果时返回0
char **errmsg
); */
/******************* SQLite数据库测试 *******************/
#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"
#define _DEBUG_ 1
int main(int argc, char *argv[])
{
sqlite3 *db = NULL; //数据库
const char *sql = 0;
char *zErrMsg = 0; //错误信息储存
int nrow = 0, ncolumn = 0; //行和列
char **azResult; //二维数组存放结果
int rc = 0;
int i = 0;
//打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
rc = sqlite3_open("rtu_data.db", &db);
if( rc )
{
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
else
printf("Open a sqlite3 database named rtu_data.db successfully!\n");
//创建一个表,如果该表存在,则不创建,并给出提示信息,存储在 zErrMsg 中
sql = "create table data_table(rtuID, registerNum, data);";
sqlite3_exec(db, sql, 0, 0, &zErrMsg);
#if _DEBUG_
printf("zErrMsg = %s \n", zErrMsg);
#endif
//插入数据: 2种方法
sql = "insert into data_table(rtuID, registerNum, data) values(01, 0001, 1);";
sqlite3_exec(db, sql, 0, 0, &zErrMsg);
sql = "insert into \"data_table\" values(02, 0002, 2.0);";
sqlite3_exec(db, sql, 0, 0, &zErrMsg);
sql = "select * from data_table;";
sqlite3_get_table(db, sql, &azResult, &nrow, &ncolumn, &zErrMsg);
printf("row=%d, column=%d\n", nrow, ncolumn);
printf("\nThe result of querying is:\n");
for(i=0; i<(nrow + 1) * ncolumn; i++)
printf("azResult[%d] = %s\n", i, azResult[i]);
//释放掉 azResult 的内存空间
sqlite3_free_table(azResult);
#if _DEBUG_
printf("zErrMsg = %s \n", zErrMsg);
#endif
sqlite3_close(db); //关闭数据库
return 0;
}