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

来源(博客频道 - CSDN.NET)

From: http://blog.csdn.net/akof1314/article/details/5937103

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

标签: sqlitemfc数据库listwrapperreport

2010-10-13 00:04 20796人阅读

分类: 2.6 第三方库(29)

版权声明:本文为博主原创文章,未经博主允许不得转载。

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文件夹下。

完成,编译程序,结果如下图所示:



示例下载:http://download.csdn.net/source/2753306

Link: http://www.asm32.net/article_details.aspx?id=7109


浏览次数 0 发布时间 2016/10/29 9:57:22 从属分类 VC++ 【评论】【 】【打印】【关闭
 
| www.asm32.net | 2006版 | 资料中心 | linux | asm/asm32 | C/C++ | VC++ | java | Python | 书签 | ASP.Net书签 | 京ICP备09029108号-1