? ? ? ?繼上篇對嵌入式數據庫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, //沒有查到結果時返回0char **errmsg
); */ /******************* SQLite數據庫測試 *******************/
#include <stdio.h>
#include <stdlib.h>#include "sqlite3.h"#define _DEBUG_ 1int 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;}elseprintf("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);
#endifsqlite3_close(db); //關閉數據庫return 0;
}