1. 程式人生 > >SQLite學習筆記(三)-- 開啟和關閉資料庫(C++實現)

SQLite學習筆記(三)-- 開啟和關閉資料庫(C++實現)

1.Sqlite庫的使用

相對來說Sqlite庫的使用還是比較簡單的。只需要包含標頭檔案和庫檔案,同時將動態連結庫放在執行程式目錄下。

//sqlite3標頭檔案
#include "sqlite3.h"
//sqlite3庫檔案
#pragma comment(lib,"sqlite3.lib")

2.開啟資料庫介面

  • 函式原型
int sqlite3_open(  const char *filename,  sqlite3 **ppDb  );
  • 引數列表
    const char *filename – 資料庫檔名,建議使用時包含完整路徑,該路徑應為UTF8編碼格式
    sqlite3 **ppDb – 資料庫控制代碼
  • 返回值
    int型數值 – 函式執行成功時,返回0;否則返回錯誤碼
  • 錯誤碼的獲取
    當執行失敗時,我們可以利用sqlite3_errmsg()函式來獲取錯誤嗎。該函式的原型如下:
const char *sqlite3_errmsg(sqlite3*);

注意:
1.開啟資料庫的時候,資料庫檔名應為UTF8格式。如果路徑名含有中文,需要先將國標字元轉換為UTF8格式。轉換方法見下文的示例程式碼;
2.當檔名引數為完整路徑時,如果上層路徑都存在,只是資料庫名檔名不對時,該函式會自動在路徑下建立對應的資料庫檔案,並返回開啟成功;
3.如果上層路徑不正確,這時會返回資料庫開啟失敗;
4.綜上所述,sqlite3_open()函式不會自動建立資料夾,只會嘗試自動建立檔案。

3.關閉資料庫介面

  • 函式原型
int sqlite3_close(sqlite3*);
  • 引數列表
    sqlite3* – 資料庫控制代碼,該控制代碼由sqlite3_open()函式返回
  • 返回值
    int型數值 – 函式執行成功時,返回0。
    注意:
    1.sqlite3_close()函式返回值基本為0,即使在資料庫控制代碼為NULL時。

4.程式碼例項

  • 程式碼說明
    本例主要說明如何開啟和關閉SQLite資料庫。
  • 測試平臺
    1.開發語言:C++
    2.開發工具:VS2015
    3.作業系統:Win7 X64
  • 具體程式碼
#include <iostream>
#include <Windows.h>
using namespace std;

//sqlite3標頭檔案
#include "sqlite3.h"
//sqlite3庫檔案
#pragma comment(lib,"sqlite3.lib")

//函式功能:將utf8字元轉gb2312字元
//引數:    const char* utf8[IN]                   -- UTF8字元
//返回值:  char*                                  -- gb2312字元
char* U2G(const char* utf8)
{
    int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
    wchar_t* wstr = new wchar_t[len + 1];
    memset(wstr, 0, len + 1);
    MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr, len);
    len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
    char* str = new char[len + 1];
    memset(str, 0, len + 1);
    WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
    if (wstr) delete[] wstr;
    return str;
}

//函式功能:將gb2312字元轉換為utf8字元
//引數:    const char* gb2312[IN]                   -- gb2312字元
//返回值:  char*                                    -- UTF8字元
char* G2U(const char* gb2312)
{
    int len = MultiByteToWideChar(CP_ACP, 0, gb2312, -1, NULL, 0);
    wchar_t* wstr = new wchar_t[len + 1];
    memset(wstr, 0, len + 1);
    MultiByteToWideChar(CP_ACP, 0, gb2312, -1, wstr, len);
    len = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL);
    char* str = new char[len + 1];
    memset(str, 0, len + 1);
    WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, len, NULL, NULL);
    if (wstr) delete[] wstr;
    return str;
}

int main()
{
    sqlite3 *pDataBase = NULL;                              
    char *zErrMsg = 0;
    //開啟資料庫
    //如果路徑不含中文,可以不用轉碼。不過保險起見,建議全部轉碼。
    int iRet = sqlite3_open(G2U("E:\\sqlite資料庫\\test.db"), &pDataBase);
    if (iRet)
    {
        cout << "資料庫開啟失敗,失敗原因:" << sqlite3_errmsg(pDataBase) << endl;
    }
    else
    {
        cout << "資料庫開啟成功!" << endl;

        //關閉資料庫
        iRet= sqlite3_close(pDataBase);
        if (0 == iRet)
        {
            cout << "資料庫關閉成功!" << endl;
        }
    }
    getchar();
    return 0;
}
  • 輸出結果
    這裡寫圖片描述