MFC使用SQLite 学习系列 一: SQLITE_MISUSE错误
一 为什么要选择SQLite
由于使用文本文件来记录测试数据,速度越来越慢的问题,经过园友推荐,使用了SQLite来进行数据的存储,再次感谢园友@LightSmaile。
关于这个问题,可以参考一下上一篇随笔中的介绍,为何要更换用数据库来存储数据。链接地址:http://www.cnblogs.com/fredliu/p/6692986.html
二 选择SQLite使用方法
当然SQLite的使用方法有很多,网上也有很多的介绍,经过筛选,我选择了使用一个封装好的MFC类,来使用SQL。
为什么要选择这个方案呢,因为我比较懒,既然有前辈做好了封装类,那直接拿过来用就好了。但是不能只做伸手党,在此介绍给园友。
CodeProject上的SQLite3Wrapper封装(http://www.codeproject.com/KB/windows/SQLite3Wrapper.aspx)
具体的使用方法,园友们可以参考一下这位朋友的介绍,使用比较简单:http://blog.csdn.net/akof1314/article/details/5937103
三 使用中遇到的问题一
环境上都搭好了,那么就开始使用了,使用中遇到的第一个问题,那就是一个错误提示 “SQLITE_MISUSE”
唉,好不容易引入SQLite,也写了不少代码,替换原来的方案了,一运行,啪,弹出来这一个错误,大晚上的搞的心情的不好了。心里还想着,赶紧把SQLite替换好原来的方案,搞完去Dota两盘呢,结果出师不利。
查看这个错误的解释
#define SQLITE_MISUSE 21 /* Library used incorrectly */
库使用不当,可我是按照事例中的方法去做的啊。
经过百度,大概了解,可能其中写的语句中有不符合规范的。
于是进过查找,找到其中多了一个“)”括号,我的天,把事例代码拷过来,增加数据后,位置不对。
fTest = gloableConfig.sqlite.DirectStatement("CREATE TABLE mainData(name varchar(50), count varchar(10)),LAvg varchar(10),LMax varchar(10),LMin varchar(10))");
啊哈哈,居然犯了这样的错误。
四 使用中遇到的问题二
这个问题解决了,然后继续跑,结果,嘎嘣,又跳出来这个错误。
我的天,这一次又是啥原因。
经过调试,找到错误代码行。
szQuery.Format("CREATE TABLE %s(index_Num varchar(10),L_L varchar(10),xSe varchar(10),ySe varchar(10),Tc varchar(10),uSe varchar(10),vSe varchar(10),X_S varchar(10),Y_S varchar(10),Z_S varchar(10))",strTemp);
这下仔细检查了了括号,也没问题,那么问题可能出在这个strTemp上。
查看strTemp的赋值
strTemp.Format("--%02d:%02d:%02d:%04d",time.wHour,time.wMinute,time.wSecond,nCeshixuhao); strTemp = strProXinghao + "--" + strTemplateName + strTemp;
心想是不是创建的表名里面不能有特殊的字符。
于是先把里面的“:”换成“_”,运行依然报同样的错误。
接着把“--”换成“_”,再运行下,OK了,不报错了。
原来是这个样字。
strTemp.Format("_%02d_%02d_%02d_%04d",time.wHour,time.wMinute,time.wSecond,nCeshixuhao); strTemp = strProXinghao + "_" + strTemplateName + strTemp;
至此 SQLite3Wrapper的基本使用已经没问题了。