SQLite學習筆記(三)-- 開啟和關閉資料庫(C++實現)
阿新 • • 發佈:2019-02-16
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;
}
- 輸出結果