MFC连接sqlite3数据库

MFC连接sqlite3数据库,第1张

概述      好一阵子没有更新了,因为项目已经做完了。这个项目的后期还有一个MFC的电脑上位机,这部分本来是由师姐做的,但是她忙,就让我小打小闹一下下。       这个MFC程序要求比较多,但是我先打算把基本框架做好,后期的事情再说。这个要求比较多,而且还在随用户的要求还要修改,但是有些部分是肯定的,比方说,连接到我做的那个Android手机的数据库, *** 作那个数据库,导出成Excel表格。    

好一阵子没有更新了,因为项目已经做完了。这个项目的后期还有一个MFC的电脑上位机,这部分本来是由师姐做的,但是她忙,就让我小打小闹一下下。

这个MFC程序要求比较多,但是我先打算把基本框架做好,后期的事情再说。这个要求比较多,而且还在随用户的要求还要修改,但是有些部分是肯定的,比方说,连接到我做的那个AndroID手机的数据库, *** 作那个数据库,导出成Excel表格。

由于手机里面的那个数据库是sqlite3,所以第一件事就是要能让MFC连接到sqlite3这个数据库,然后才有别的 *** 作。这个真的是花费不少时间做连接调试。下面具体说说怎么实现的。

sqlite3的官网是有提供源码和一些编译好的下载资源。(http://www.sqlite.org/download.html)这里可以下载到我截图的这些文件。但是红线标注的是没有的,要自己手动生成,或者在别的地方下载。生成也很简单,新建一个Win32 Dynamic-link library工程,然后添加源码,编译一下就可以了。(怕麻烦的的话,这里有我打包的库文件:http://download.csdn.net/detail/u012321815/7617293)

有了这些文件,只要把他们添加到你的工程里面,然后添加头文件和.cpp文件,当然,还要设置包含库和引用库。

其实设置了这些就应该可以连接并 *** 作数据库的,但是往往没那么顺利,因为我调试了一上午才成功了,不同机器可能编译调试时报的错误不同,所以我就不给出我调试时的错误了,(其实我也没截图当时),不过报错怎么办呢?你不是第一个遇到错误的人,所以记住,百度一下,肯定可以解决的。

接下来说说 *** 作数据库。如果你只需要用到像我这样,越简单约好的话,我可以告诉你,程序很简单,无非是增删改查四步,也就是几个关键函数的调用就好了。前提是你对数据库有最基本的了解。

这是查询里面的显示函数,也是最简单的查询 *** 作。db.open(m_exclefilepath)是打开选择的路径下的数据库,里面的参数是路径;db.tableExists("data")是查看表data是否存在,因为我androID的那个程序的数据库的表名就是data;Cppsqlite3Buffer bufsql;bufsql.format("select * from data where %s;",tempsql);q = db.execquery(bufsql);前两句是为了拼装一句SQL语句,因为包含特殊字符串,所以用的是自带的这个buffer,尽量不要用string的“+”,最后一句是查询,当然,因为第二句是一句条件sql,所以这里是条件查询,返回的是一个集合Cppsqlite3query;q.nextRow()是指向下一条记录;!q.eof()循环条件不为空;有了上面这些解释,下面的代码就很好懂了。

voID CqueryDialog::ShowDBList(CString sql){	CString tempsql = "";	tempsql = G2U(sql);	try{		Cppsqlite3DB db;		db.open(m_exclefilepath);		// 判断是否存在表data、建立表        if (db.tableExists("data"))        {			int count = 0;			// 查询			Cppsqlite3query q;			if(sql==""){				q= db.execquery("select * from data ;");			}else{				Cppsqlite3Buffer bufsql;				bufsql.format("select * from data where %s;",tempsql);				q = db.execquery(bufsql);			}			while (!q.eof())			{				CString str_ID = CString(q.fIEldValue(0));				CString str_linename = CString(q.fIEldValue(1));				CString str_time = CString(q.fIEldValue(2));				CString str_IDentification = CString(q.fIEldValue(3));				CString str_stationtrack = CString(q.fIEldValue(4));				CString str_mileage = CString(q.fIEldValue(5));				CString str_hundred = CString(q.fIEldValue(6));				CString str_ten = CString(q.fIEldValue(7));				CString str_longitude = CString(q.fIEldValue(8));				CString str_latitude = CString(q.fIEldValue(9));				CString str_sIDegrinding = CString(q.fIEldValue(10));				CString str_verticalmill = CString(q.fIEldValue(11));				CString str_fatedge = CString(q.fIEldValue(12));				CString str_brightbeltlocation = CString(q.fIEldValue(13));				CString str_brightbeltwIDth = CString(q.fIEldValue(14));				CString str_profile13 = CString(q.fIEldValue(15));				CString str_profile25 = CString(q.fIEldValue(16));				CString str_profile487 = CString(q.fIEldValue(17));				CString str_profile65 = CString(q.fIEldValue(18));				m_Listquery.InsertItem(count,_T(""));				m_Listquery.SetItemText(count,U2G(str_ID) );				m_Listquery.SetItemText(count,1,U2G(str_linename) );				m_Listquery.SetItemText(count,2,U2G(str_time) );				m_Listquery.SetItemText(count,3,U2G(str_IDentification) );				m_Listquery.SetItemText(count,4,U2G(str_stationtrack) );				m_Listquery.SetItemText(count,5,U2G(str_mileage) );				m_Listquery.SetItemText(count,6,U2G(str_hundred) );				m_Listquery.SetItemText(count,7,U2G(str_ten) );				m_Listquery.SetItemText(count,8,U2G(str_longitude) );				m_Listquery.SetItemText(count,9,U2G(str_latitude) );				m_Listquery.SetItemText(count,10,U2G(str_sIDegrinding) );				m_Listquery.SetItemText(count,11,U2G(str_verticalmill) );				m_Listquery.SetItemText(count,12,U2G(str_fatedge) );				m_Listquery.SetItemText(count,13,U2G(str_brightbeltlocation) );				m_Listquery.SetItemText(count,14,U2G(str_brightbeltwIDth) );				m_Listquery.SetItemText(count,15,U2G(str_profile13) );				m_Listquery.SetItemText(count,16,U2G(str_profile25) );				m_Listquery.SetItemText(count,17,U2G(str_profile487) );				m_Listquery.SetItemText(count,18,U2G(str_profile65) );				count++;				q.nextRow();			}			q.finalize();         }         else        {			AfxMessageBox("表data不存在");        }    }    catch (Cppsqlite3Exception& e)    {		// 出错    }	AfxMessageBox("检索完毕");}

当然,上面是条件查询,还有增删改,这都要用到另外一个函数db.execDML(bufsql);这个函数和db.execquery(bufsql)很类似,但是前者返回值是一个int后者返回值是一个字集,前者只是看 *** 作成功了没有,后者是给出查询到的结果。比方说我这里用到的增删改三种 *** 作,我直接贴我的代码,很简单。

//插入一条空记录在最后一行的下一行	Cppsqlite3Buffer bufsql;	bufsql.format("insert into data values (%d,'','');",atoi(dblastID)+1);	db.execDML(bufsql);

这是插入一行空记录,只有ID。

//删掉指定行			Cppsqlite3Buffer bufsql;			bufsql.format("delete from data where ID = %s;",ID);			db.execDML(bufsql);

这是删掉一行,要给出ID。或者别的条件,当然,你也可以把怎个表删掉,直接用drop table,懂SQL语句就行。

//更新数据库	Cppsqlite3Buffer bufsql;	bufsql.format("update data set %s = '%s' where ID = %s;",head,G2U(strText),ID);	db.execDML(bufsql);

这是更新数据库,要有条件,这里是指定ID的更新。

要用的到基本就是这么多,还想要调用更多的函数,可以直接查看源文件里面的函数说明,不是很难,可以看注释。


  总结

以上是内存溢出为你收集整理的MFC连接sqlite3数据库全部内容,希望文章能够帮你解决MFC连接sqlite3数据库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1172094.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存