在vc環境下支持sqlite3的方法有不少,sqlite官網也有推薦sqlitewrappers列表,我選用的是CppSqlite
創建MFC工程的步驟我就不贅述了,如下操做均假設你已經建立好了一個MFC工程
測試環境:windows7
編譯環境:Visual Studio 2015
添加步驟:
一、下載壓縮文件,我下載的是最新的版本「Download CppSQLite 3.2 demo projects, source and sqlite3.dll for SQLite 3.4.0 - 252 KB」 ,該版本支持SQLite3 3.4
二、解壓,將common/文件夾中的CppSQLite3.cpp、CppSQLite3.h、sqlite3.dll、sqlite3.lib四個文件拷貝到你的工程目錄下
三、項目->頭文件->添加->現有項->在目錄中找到CppSQLite3.h並添加;項目->源文件->添加->現有項->找到CppSQLite3.cpp並添加
四、項目右鍵->屬性->連接器->輸入中填入sqlite3.lib,自此 你的工程就支持sqlite3啦
類封裝說明:
介紹幾個經常使用的類:CppSQLiteDB、CppSQLiteQuery
一、CppSQLiteDB
該類主要是對數據庫文件的基本操做,包含打開關閉查詢等命令,介紹幾個經常使用的函數
a)、open(xxx.db)
功能:打開一個數據庫文件
參數:char*類型,數據庫文件名
說明:若是該db文件不存在,會建立
b)、close()
功能:關閉數據庫文件
參數:無
說明:該函數不須要咱們手動調用,CppSQLiteDB的析構函數中會調用
c)、execDML(command)
功能:用於直接執行create/drop/insert/update/delete命令(data manipulation language)
參數:char*類型,要執行的命令
說明:返回值是操做了的行數
d)、execQuery()
功能:用於執行查詢信息
參數:執行查詢信息的命令
說明:返回值是CppSQLiteQuery類
舉例:
CppSQLiteQuery query = db.execQuery("select * from tablename;")
注意:最後須要手動調用query.finalize(),不然,會引發內存泄漏從而致使保存。(文檔上說的不用手動釋放,目前還沒找到緣由)
e)、execScalar()
功能:獲得當前table的行數
參數:執行命令
說明:返回行數
舉例:
int raws = db.execScalar("select count(*) from tablename;")
二、CppSQLiteQuery
CppSQLiteQuery query = db.execQuery("select * from tablename;")
a)、numFields()
功能:獲得當前字段數(你能夠理解爲列數)
參數:無
說明:獲得當前的列數
b)、fieldName(int nCols)
功能:獲得當前的列標題
參數:某一列的列數(從0開始)
c)、fieldDeclType(int nCols)
功能:獲得當前列的元素類型
參數:某一列的列數(從0開始)
這三個函數通常會這樣用:
for (fld = 0; fld <query.numFields(); fld++) { cout <<query.fieldName(fld) << "(" <<query.fieldDeclType(fld) << ")|"; } cout << endl;
d)、fieldValue(int nCols)
功能:獲得當前列的值
參數:某一列的列數(從0開始)
e)、eof()
功能:用於迭代查詢結果,與nextRow()配合使用
參數:無
說明:返回值爲TRUE時,表示已經到達查詢結果的最後一個,終止迭代便可
f)、nextRow()
功能:迭代到查詢結果的下一行,長與eof()配合使用
參數:無
這三個函數通常會這樣用:
while (!q.eof()) { cout << q.fieldValue(0) << "|"; //獲得當前列的值 cout << q.fieldValue(1) << "|" << endl; //獲得當前列的值 q.nextRow(); }