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());//清除LIST列项
CRect rect;
m_ListCtrl.GetWindowRect(&rect); //获得LIST控件大小
int nFields = stmt->Fields(); //取得数据库表的列数
int nWidth = (rect.Width() - rect.Width() * 0.02) / nFields; //平均分布列数
int nCol = ;
int nRow = ;
CString szText;
for(nCol = ; nCol < nFields; nCol++)
{
szText = stmt->FieldName(nCol); //得到列名
m_ListCtrl.InsertColumn(nCol, szText, LVCFMT_LEFT, nWidth, nCol);
}
while (stmt->NextRow())
{
szText = stmt->ValueString(); //得到列值
m_ListCtrl.InsertItem(nRow, szText);
for(nCol = ; nCol < nFields; nCol++)
{
szText = stmt->ValueString(nCol); //得到列值
m_ListCtrl.SetItem(nRow, nCol, LVIF_TEXT, szText, , , , );
}
++nRow;
}
}
delete stmt;
UpdateData(FALSE);
}

第八步:把“w32SQLite3.dll”放到Debug文件夹下。
完成,编译程序,结果如下图所示:

---------------------
版权声明:本文为CSDN博主「无幻」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/akof1314/article/details/5937103

VC连接SQLite3的方法(MFC封装类)的更多相关文章

  1. VC连接mysql数据库错误:libmysql.lib : fatal error LNK1113: invalid machine 解决方法

    VC连接MySQL的配置过程在上一篇博文中,不过当你设置好,以为万事大吉的时候,运行却出现这个错误:libmysql.lib : fatal error LNK1113: invalid machin ...

  2. VC++中操作XML(MFC、SDK)转

    [转]VC++中操作XML(MFC.SDK) XML在Win32程序方面应该没有在Web方面应用得多,很多Win32程序也只是用XML来存存配置信息而已,而且没有足够的好处的话还不如用ini.VC++ ...

  3. VC连接SQL server2005

    VC连接SQL server2005 1.创建一个MFC对话框程序 界面如下 2.创建一个成员变量 这个成员变量用于连接数据库 3.响应按钮函数OnButton1() 在响应函数里主要有三个函数 函数 ...

  4. Linux Vsftpd 连接超时解决方法

    Linux Vsftpd 连接超时解决方法 2013-11-13 10:58:34|  分类: 默认分类|举报|字号 订阅     解决方法(http://www.lingdus.com/thread ...

  5. [转]PROC简单使用用例--VC连接ORACLE

    [转]PROC简单使用用例--VC连接ORACLE 操作系统:windows 7 数据库版本:oracle 10g VS版本:VS2010 前言:连接ORACLE的方式有很多,此处仅以PROC为例,说 ...

  6. 问题-FireDAC连接Sqlite3提示“unable to open database file”

    相关资料:http://www.dfwlt.com/forum.php?mod=viewthread&tid=1497&extra= 问题现象:FireDAC连接Sqlite3在开发电 ...

  7. C#连接Oracle的方法

    C#连接Oracle的方法 方法1: System.Data.OracleClient oracleConnectionString : data source = orcl;user id= sco ...

  8. ssh能够连接而sftp不能连接的解决方法

    ssh能够连接而sftp不能连接的解决方法   昨天开始用FileZilla一直不能登录远程的服务器,ssh的登录就OK,因为是服务器,也不敢乱动.查了好多资料终于解决了. 首先,查看一下系统的安全日 ...

  9. 更改计算机名及使用Secure CRT ssh连接用户添加方法汇总

    修改计算机名 更改/etc/sysconfig下的network文件,在提示符下输入vi /etc/sysconfig/network,然后将HOSTNAME后面的值改为想要设置的主机名.  开启SS ...

随机推荐

  1. CSP-S2019退役记/爆内存记

    DAY 0 准备出发. 出发前教练说遇到事不慌,打电话,又听教练说了说历年赶车经历. 然后这趟路上居然没有什么大事. 在车上有些闲,于是就和其他人聊了会天,聊着聊着没意思,就用手机翻博客园. 这样就不 ...

  2. flutter中的路由跳转

    在前面的基本路由和命名路由中,都演示了如何进行路由跳转,并且在路由跳转以后,可以借用系统自带的按钮就行返回上一级,当然了,也可以自定义按钮返回上一级. 返回上一级 在前面的例子中,当从Home.dar ...

  3. delphi WaitForSingleObject 示例之一等待另一个进程的结束

    <pre>unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Cont ...

  4. LOJ 2541 「PKUWC2018」猎人杀——思路+概率+容斥+分治

    题目:https://loj.ac/problem/2541 看了题解才会……有三点很巧妙. 1.分母如果变动,就很不好.所以考虑把操作改成 “已经选过的人仍然按 \( w_i \) 的概率被选,但是 ...

  5. Bugku | Easy_Re

    学到一个函数: _mm_storeu_si128((__m128i *)&v5, _mm_loadu_si128((const __m128i *)&xmmword_413E34)); ...

  6. No orientation specified, and the default is horizontal.异常处理(转)

    参考:http://blog.csdn.net/sky_monkey/article/details/21466975 整的错误提示信息为: No orientation specified, and ...

  7. 【项目管理和构建】——Maven简介(一)

    在现实的企业中,以低成本.高效率.高质量的完成项目,不仅仅需要技术大牛,企业更加需要管理大牛,管理者只懂技术是远远不够的.当然,管理可以说有很多的方面,例如:对人员的管理,也有对项目的管理等等.如果你 ...

  8. php中class类文件引入方法汇总

    在项目中  总是会用到类文件引入的操作,在此简单总结下: 方法一: 使用  include,require,include_once,require_once. 其中:*_once  once意为曾经 ...

  9. mybatis的一些小细节

    Mybatis要解决的问题: 1. 将sql语句硬编码到java代码中,如果修改sql语句,需要修改java代码,重新编译.系统可维护性不高. 设想如何解决? 能否将sql单独配置在配置文件中. 2. ...

  10. “希希敬敬对”队软件工程第九次作业-beta冲刺第三次随笔

    “希希敬敬对”队软件工程第九次作业-beta冲刺第三次随笔 队名:  “希希敬敬对” 龙江腾(队长) 201810775001 杨希                   201810812008 何敬 ...