1. 程式人生 > >sqlite學習筆記7:C語言中使用sqlite之打開數據庫

sqlite學習筆記7:C語言中使用sqlite之打開數據庫

實例 clas details code 返回 pri san filename stdlib.h

數據庫的基本內容前面都已經說得差點兒相同了。接下看看如何在C語言中使用sqlite。

一 接口

sqlite3_open(const char *filename, sqlite3 **ppDb)

打開數據庫,假設數據庫不存在則新建一個數據庫,並打開


sqlite3_close(sqlite3*)

關閉數據庫。假設關閉之前還存在沒有運行完的語句,將會返回SQLITE_BUSY


二 實例

1 文件夾結構

Projects{

main.c// 代碼所在文件

sqlite{// 官網下載下來的sqlite壓縮包解壓之後的文件文件夾

shell.c// 本文件在項目中實際上是用不上的。這個文件是用來生成sqlite命令工具的,詳細能夠參考:sqlite學習筆記1

sqlite3.c

sqlite3.h

sqlite3ext.h

}

}


2 源碼

// main.c
#include <stdio.h>
#include <stdlib.h>
#include "sqlite/sqlite3.h"

#define DB_NAME "hanfeng.db"

int main()
{
    sqlite3* db = NULL ;
    char* msg = NULL ;
    int ret = 0 ;
    
    ret = sqlite3_open(DB_NAME, &db);
    if (ret){
        fprintf(stderr, "error open datebase:%s\n.", DB_NAME) ;
        exit(0) ;
    }
    else{
        fprintf(stdout, "successfully open datebase.\n") ;
    }
    sqlite3_close(db) ;
    return 0;
}


為了今後擴展方便,現將代碼改動例如以下:

#include <stdio.h>
#include <stdlib.h>
#include "sqlite/sqlite3.h"

#define DB_NANE "sqlite/test.db"

sqlite3 *db = NULL;
char* sql = NULL;
char *zErrMsg = NULL;
int ret = 0;

typedef enum{
    false,
    true
} bool;

static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
    int i = 0;
    for(i=0; i < argc; i++){
        printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
    }
    printf("\n");
    
    return 0;
}

bool connectDB()
{
    ret = sqlite3_open(DB_NANE, &db);
    
    if( ret != SQLITE_OK){
        fprintf(stderr, "Error open database: %s\n", sqlite3_errmsg(db));
        sqlite3_free(zErrMsg);
        
        return false;
    }
    
    fprintf(stdout, "Successfully opened database\n");
    return true;
}

bool closeDB()
{
    int ret = 0;
    ret = sqlite3_close(db);
    if ( ret == SQLITE_BUSY ){
        return false;
    }
    
    return true;
}

int main(int argc, char* argv[])
{
    connectDB();
    closeDB();
    
    return 0;
}



3 編譯執行

執行有兩種方式,基於前面的筆記。我們並沒有配置sqlite的環境。不過下載解壓得到列一個目錄sqlite,因此。須要用例如以下命令:

gcc -o main main.c ./sqlite/sqlite3.c -lpthread -ldl

假設下載配置安裝了sqlite,則須要將上面的頭文件包括改為:

#include <sqlite3.h>

然後運行命令:

gcc -o main main.c  -lsqlite3


命令運行完畢之後會生成一個叫main的可運行文件,輸入:

./main

既能夠看到結果。


#在編譯時使用g++會報錯: error: invalid conversion from ‘const void*’ to ‘const char*’

g++貌似對類型轉換要求更為嚴格,不支持這種轉換。

路過的大俠,知道如何用g++編譯的,請不吝賜教......

sqlite學習筆記7:C語言中使用sqlite之打開數據庫