天天看點

SQlite3中級篇(C/C++程式設計接口)

/*
SQLite資料庫SQLite是一個開源的嵌入式關系資料庫,在2000年由D.Richard Hipp釋出。SQLite能夠減少應用程式管理資料庫的開銷,可逢移植性好,高效而且可靠。SQLite嵌入到應用程式中,與應用程式共用相同的程序空間,而不是單獨的一個程序。從外部看,SQLite并不像一個關系資料庫,但在程序内部,卻是完整的、自包含的資料庫引擎。
*/
           
//應用到的函數:	
sqlite3_open();		//打開資料
sqlite3_exec();		//執行SQL語句
sqlite3_close()		//關閉資料           
/*
函數參數介紹
*/

//打開資料
int sqlite3_open(   //打開資料庫,并得到資料句柄
    "temp.db",      //要打開的資料庫檔案名,如果沒有者建立個資料庫檔案
    &db             //儲存打開資料庫的資料庫指針
);

//執行SQL語句
typedef int (*sqlite3_callback)(  //sqlite3_exec()的回調函數
    void * para,                  //可傳入指針(比如結構指針)要經過強制轉換才能用
    int n_column,                 //記錄有多少個字段(即這條記錄有多少列)
    char ** column_value,         //個關鍵值,查出來的資料都儲存在這裡
    char ** column_name           //跟前個char**是對應的,表示這個字段的字段名稱
);

int sqlite3_exec(                             //執行SQL語句,沒有傳回值的3,4直接NULL
    sqlite3*,                                 //資料庫句柄
    const char *sql,                          //要執行的資料語句字元串的首位址
    int (*callback)(void*,int,char**,char**), //(*sqlite3_callback)的位址
    void *,                                   //Callback函數第一個參數指針
    char **errmsg                             //執行完所有SQL傳回0,否者傳回錯誤代碼
);

int sqlite3_close(   //關閉之前打開的資料庫
    sqlite3 *        //要關閉的資料指針
);           
//應用例子
#include <stdio.h>
#include <string.h>
#include "sqlite3.h"

//sqlite3的回調函數
//sqlite每查到一條記錄,就調用一次這個回調
//回調函數原型:typedef int (*sqlite3_callback)(void*,int,char**,char**);
int LoadMyInfo(void* para,int n_column,char** column_value,char** column_name)
{
    int i;
    printf("記錄包含%d個字段\n\n",n_column);
    for(i=0; i<n_column; i++)
    {
        printf("字段名:%s\t字段值:%s\n\n", column_name[i], column_value[i]);
    }
    printf("------------------------------\n");
    return 0;
}

int main(int argc, char *argv[])
{
    sqlite3 * db;
    int result;
    char * errmsg = NULL;
    result = sqlite3_open("temp.db",&db);

    //資料庫操作代碼

    /*建立一個測試表,表名叫MyTable,有2個字段:ID和name。其中ID是一個自動增加的類型,以後insert時可以不去指定這個字段,它會自己從0開始增加*/
//	result = sqlite3_exec(db,"create table MyTable(ID integer primary key autoincrement,name nvarchar(32))",NULL,NULL,&errmsg);

    //插入一些記錄
    /*
    result = sqlite3_exec(db,"insert into MyTable(name) values('走路')",0,0,&errmsg);
    result = sqlite3_exec(db,"insert into MyTable(name) values('騎單車')",0,0,&errmsg);
    result = sqlite3_exec(db,"insert into MyTable(name) values('坐汽車')",0,0,&errmsg);
    */


    //開始查詢資料庫
    result = sqlite3_exec(db,"select * from MyTable",LoadMyInfo,NULL,&errmsg);

    //關閉資料庫
    sqlite3_close(db);
    return 0;
}           

點選程式源代碼下載下傳