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文件夹下。
完成,编译程序,结果如下图所示:

SQLite3的MFC使用的更多相关文章

  1. 在MFC中支持sqlite3

    在vc环境下支持sqlite3的方法有很多,sqlite官网也有推荐sqlitewrappers列表,我选用的是CppSqlite 建立MFC工程的步骤我就不赘述了,以下操作均假设你已经创建好了一个M ...

  2. VC++、MFC Sqlite3数据库的使用

    SQLite数据库是一种本地的轻型数据库,在存储一些本地的数据的时候,或者不需要用到Oracle,SQL2008之类的大型数据库的时候,Sqlite的优势就能够得到发挥.程序需要采集数据存储起来,可以 ...

  3. MFC中使用sqlite3操作数据库

    需要用到的文件有sqlite3.h .sqlite3.dll.sqlite3.lib.网上很多人分享下载地址这里不再赘述. 将这三个文件拷贝到自己新建MFC项目目录下,在解决方案窗口下 添加现有项,选 ...

  4. VC连接SQLite3的方法(MFC封装类)

    SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,支持跨平台,操作简单,能够使用很多语言直接创建数据库.官方网站:www.sqlite.org 在VC环境下编写连接SQLite的 ...

  5. 多人操作sqlite3数据库冲突问题解决方法

    问题描述:sqlite3数据放置在某一台电脑的某个共享文件夹下,操作数据库的应用程序安装在同一局域网下的很多台电脑上,由于存在多人同时使用该应用程序,所以存在多人同时操作数据库的情况.经过测试发现,最 ...

  6. VC++ 6.0 sqlite3 配置、测试

    /************************************************************************************* * VC++6.0 sql ...

  7. VS2013 生成sqlite3动态连接库及sqlite3.dll的调用

    一,生成sqlite3动态连接库1,去sqlite官网上下载最近的sqlite源码包,解压后得到四个文件:shell.c,sqlite3.c,sqlite3.h,sqlite3ext.h此处还需要sq ...

  8. vs2010静态链接MFC库报链接错误

    由于需要将MFC程序在其它电脑上运行,所以需要将动态链接的MFC改成静态链接,本以为很简单,没想到链接的时候出现下面的链接错误: uafxcw.lib(afxmem.obj) : error LNK2 ...

  9. MFC中成员变量的声明顺序与析构顺序

    第一次用博客,第一篇随笔,就写今天遇到的一个问题吧. 在VS2008的MFC对话框程序,窗口成员变量的声明顺序与其析构顺序相反,即,先声明的变量后析构,后声明的变量先析构.未在其他模式下测试. cla ...

随机推荐

  1. Matplotlib.pyplot 把画图保存为图片

    在plt.show()之前执行plt.savefig()函数即可. 简单例子: import matplotlib.pyplot as plt x=[1,2,3,4,5] y=[10,5,15,10, ...

  2. springboot2.0配置连接池(hikari、druid)

    springboot2.0配置连接池(hikari.druid) 原文链接:https://www.cnblogs.com/blog5277/p/10660689.html 原文作者:博客园--曲高终 ...

  3. java - 策略模式、状态模式、卫语句,避免多重if-else(转)

    前言 当代码中出现多重if-else语句或者switch语句时.弊端之一:如果这样的代码出现在多处,那么一旦出现需求变更,就需要把所有地方的if-else或者switch代码进行更改,要是遗漏了某一处 ...

  4. python常用技巧

    1,关于tab键与4个空格: 由于不同平台间,tab键值设置有所区别,据相关介绍,官方在缩进方面推荐使用4个空格.方便起见,可设置tab自动转换为4个空格. 1.1在pycharm中:    通过fi ...

  5. UVALive - 5857 Captain Q's Treasure

    UVALive - 5857 思路: 状压dp,用map写 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimi ...

  6. 2018-2019-2 网络对抗技术 20165303 Exp3 免杀原理与实践

    实验内容 一. 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分),veil-evasion(0.5分),加壳工具(0.5分),使用shellcode编程(1分) ...

  7. HBase Block Cache(块缓存)

    Block Cache HBase提供了两种不同的BlockCache实现,用于缓存从HDFS读出的数据.这两种分别为: 默认的,存在于堆内存的(on-heap)LruBlockCache 存在堆外内 ...

  8. guxh的python笔记十一:异常处理

    1,抓错方法 name = [0, 1, 2] try: name[3] except IndexError as exc: # 抓单个错误,打印错误信息e print(exc) except (In ...

  9. 在chrome上隐藏video的option按钮

    隐藏方法: video::-webkit-media-controls{ overflow:hidden !important;}video::-webkit-media-controls-enclo ...

  10. Educational Codeforces Round 41 (Rated for Div. 2)F. k-substrings

    题意比较麻烦略 题解:枚举前缀的中点,二分最远能扩展的地方,lcp来check,然后线段树维护每个点最远被覆盖的地方,然后查询线段树即可 //#pragma GCC optimize(2) //#pr ...