嵌入式數據庫SQlite測試程序

       繼上篇對嵌入式數據庫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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章