SQLite3的MFC使用


SQLite,是一款輕型的數據庫,是遵守ACID的關聯式數據庫管理系統,支持跨平台,操作簡單,能夠使用很多語言直接創建數據庫。
官方網站:www.sqlite.org

在VC環境下編寫連接SQLite的方法,網上有很多種,自己試驗了其中一種,感覺還不錯,下面記錄下來,使用到的文件包括官方網站下載的文件和CodeProject上的SQLite3Wrapper封裝(http://www.codeproject.com/KB/windows/SQLite3Wrapper.aspx)

測試環境:Windows 7
編程環境:Visual Studio 2008 SP1
第一步:新建基於對話框的工程,名稱為SQLiteTest;
第二步:添加sqlite3.h、sqlite3i.h、DbSqlite.h、DbSqlite.cpp四個文件到工程;
第三步:在對話框上添加兩個按鈕,一個LIST列表控件,修改其VIEW屬性為report,為其添加變量m_ListCtrl;
第四步:把“w32SQLite3.lib”放到工程的目錄下,右鍵點擊解決方案里面項目的“屬性”,在“鏈接器”的“輸入”的“附加依賴項”填入“w32SQLite3.lib”;
第五步:在對話框的實現文件里面添加頭文件

 

#include "DbSQLite.h" 

第六步:“創建一張表”按鈕的代碼:

 

void CSQLiteTestDlg::OnBnClickedCreateButton() 

    bool fTest; 
    CDbSQLite sqlite; 
    //連接打開SQLite數據庫 
    fTest = sqlite.Open(_T("theTestSqlite.db")); 
    if (!fTest) 
    { 
        AfxMessageBox(_T("打不開theTestSqlite.db")); 
        return; 
    } 
    //執行創建表語句 
    fTest = sqlite.DirectStatement(_T("CREATE TABLE usersInfo(name varchar(30), password varchar(20))")); 
    if (!fTest) 
        AfxMessageBox(_T("不能創建表usersInfo")); 
    //新增數據 
    CString szQuery; 
    szQuery = _T("INSERT INTO usersInfo VALUES ('xiaoWang','123')"); 
    fTest = sqlite.DirectStatement(szQuery); 
    if (!fTest) 
        AfxMessageBox(_T("插入數據失敗!")); 
    szQuery = _T("INSERT INTO usersInfo VALUES ('daWang','322')"); 
    fTest = sqlite.DirectStatement(szQuery); 
    if (!fTest) 
        AfxMessageBox(_T("插入數據失敗!")); 
    AfxMessageBox(_T("創建表成功,插入數據成功!")); 

 

第七步:“預覽數據”按鈕的代碼:

 

void CSQLiteTestDlg::OnBnClickedLookButton() 

    BOOL fTest; 
    CDbSQLite sqlite; 
    fTest = sqlite.Open(_T("theTestSqlite.db")); 
    if (!fTest) 
    { 
        AfxMessageBox(_T("打不開theTestSqlite.db")); 
        return; 
    } 
    CSqlStatement *stmt = sqlite.Statement(_T("SELECT * FROM usersInfo")); 
    //當數據不為空的時候,填充LIST控件 
    if (stmt != NULL) 
    { 
        m_ListCtrl.DeleteAllItems();  //清除LIST項 
        while(m_ListCtrl.DeleteColumn(0));//清除LIST列項 
        CRect rect; 
        m_ListCtrl.GetWindowRect(&rect);  //獲得LIST控件大小 
        int nFields = stmt->Fields();  //取得數據庫表的列數 
        int nWidth = (rect.Width() - rect.Width() * 0.02) / nFields; //平均分布列數 
        int nCol = 0; 
        int nRow = 0; 
        CString szText; 
        for(nCol = 0; nCol < nFields; nCol++) 
        { 
            szText = stmt->FieldName(nCol);        //得到列名 
            m_ListCtrl.InsertColumn(nCol, szText, LVCFMT_LEFT, nWidth, nCol); 
        } 
        while (stmt->NextRow()) 
        { 
            szText = stmt->ValueString(0);        //得到列值 
            m_ListCtrl.InsertItem(nRow, szText); 
            for(nCol = 1; nCol < nFields; nCol++) 
            { 
                szText = stmt->ValueString(nCol); //得到列值 
                m_ListCtrl.SetItem(nRow, nCol, LVIF_TEXT, szText, 0, 0, 0, 0); 
            } 
            ++nRow; 
        } 
    } 
    delete stmt;
    UpdateData(FALSE); 

 

 

第八步:把“w32SQLite3.dll”放到Debug文件夾下。
完成,編譯程序,結果如下圖所示:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM