在vc環境下支持sqlite3的方法有很多,sqlite官網也有推薦sqlitewrappers列表,我選用的是CppSqlite 建立MFC工程的步驟我就不贅述了,以下操作均假設你已經創建好了一個MFC工程 測試環境:windows7 編譯環境:Visual Studio 2015 添加步驟: 1 ...
在vc環境下支持sqlite3的方法有很多,sqlite官網也有推薦sqlitewrappers列表,我選用的是CppSqlite 建立MFC工程的步驟我就不贅述了,以下操作均假設你已經創建好了一個MFC工程 測試環境:windows7 編譯環境:Visual Studio 2015 添加步驟: 1、下載壓縮文件,我下載的是最新的版本“Download CppSQLite 3.2 demo projects, source and sqlite3.dll for SQLite 3.4.0 - 252 KB” ,該版本支持SQLite3 3.4 2、解壓,將common/文件夾中的CppSQLite3.cpp、CppSQLite3.h、sqlite3.dll、sqlite3.lib四個文件拷貝到你的工程目錄下 3、項目->頭文件->添加->現有項->在目錄中找到CppSQLite3.h並添加;項目->源文件->添加->現有項->找到CppSQLite3.cpp並添加 4、項目右鍵->屬性->鏈接器->輸入中填入sqlite3.lib,自此 你的工程就支持sqlite3啦 類封裝說明: 介紹幾個常用的類:CppSQLiteDB、CppSQLiteQuery
1、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;")2、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();
}