CppSQLite3U使用小结

来源:IT165收集  发布日期:2015-03-26 20:14:34

CppSQLite3U是一个封装好的MFC可以使用的操作sqlite3的类,之前自己写过一部份,但是后来总觉得不够成熟,总要去修改代码,觉得不够完善,索性就在网上找到了这个用了起来,用来一段时间后,发现还挺不错的,duang的一下,效果就出来了,现在写写这篇文章,是要告诉你们,我可以这样简单方便的使用,在你看完我的介绍后,你也可以。

附件稍后上传,总共有五个文件

CppSQLite3U.cpp

CppSQLite3U.h

sqlite3.h

sqlite3.lib

sqlite3.dll

把.h和.cpp的文件都添加进项目里,.lib.dll放到项目根目录,在项目设置link中Object/libiary modules中写上sqlite3.lib,引入这个东西,当然写在代码中也是一样的,只不过我忘了该怎么写,哈哈,有工具就要利用嘛

好了,这是初步加载方法,接下来再看怎么使用,我只记录下我使用过的,因为网上资料很多,介绍的很详细,但是我用不到那么多,我只是想写一个简单的本地化小工具而已,所以只记录下简单的使用方法,目的是为了方便后期自己使用时能够快速查阅,因为工作原因,不怎么用mfc了,几个月下来早已经忘光了,只能以这种形式来记录了。

1. 在需要引用的源代码中include下CppSQLite3U.h,好像是废话,不过自己确实都已经忘了代码要这样写

2. CppSQLite3DB db;//声明

3. db.open("数据库名.db") // sqlite数据库文件名

4. CppSQLite3Query query;

5. query = db.execQuery("SQL语句");

6. for(int i=0;i<query.numFields();++i){ //numFields()表示的是总列数,也就是总共有多少个字段

query.fieldName(i); // fieldName(i)表示的是列名,也就是字段名,可以在sql语句中使用 price AS 金额,这样出来的就是字段名,很方便

}

7. while(!query.eof()){

query.eof(); // 当其为真表示到头了后面没有数据了

query.getStringField(); // 参数可填列号或者字段名继而获得字段值

query.nextRow(); // 跳转到下一行数据

}

8. query.finalize(); // 释放掉Query

9. db.close(); // 关闭掉db;

需要注意的是这里查询后得到的数据,也就是getStringField();得到的数据,是utf8编码的,因为我用的是vc6,vc6默认是ansi的,所以为乱码,这里有必要想办法进行转码后再进行使用,我是自己写了一个Convert函数来进行的,但是依然有些小问题没能解决,但是不影响使用,此函数也贴上省得以后找的麻烦,实际上也是网上找的啦,- -!

 

/*
	使用方法:
	Convert(strA_in,strB_out,CP_UTF8,CP_ACP)//UTF8转换ANSI
	Convert(strA_out,strB_in,CP_ACP,CP_UTF8)//ANSI转换UTF8
 */
void Convert(const char *strIn, char *strOut, int sourceCodepage, int targetCodepage)
{
       int len=lstrlen(strIn);
       int unicodeLen=MultiByteToWideChar(sourceCodepage,0,strIn,-1,NULL,0);
       wchar_t* pUnicode;
       pUnicode=new wchar_t[unicodeLen+1];
       memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t));
       MultiByteToWideChar(sourceCodepage,0,strIn,-1,(LPWSTR)pUnicode,unicodeLen);
       BYTE * pTargetData = NULL;
       int targetLen=WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,0,NULL,NULL);
       pTargetData=new BYTE[targetLen+1];
       memset(pTargetData,0,targetLen+1);
       WideCharToMultiByte(targetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,targetLen,NULL,NULL);
       lstrcpy(strOut,(char*)pTargetData);
       delete pUnicode;
       delete pTargetData;
}

上面的是介绍如何遍历查询数据库中数据的,再写上如何插入的:

 

db.execDML("SQL语句");

还有一个函数,也写上,query.getIntFiel("NUM");根据字段名来获取一个整形的数值,这里的NUM是通过上一步查询语句query = db.execQuery("SELECT COUNT(*) AS NUM FROM tableName")得来的

另外就是异常:

try{

}catch(CppSQLite3Exception e){

MessageBox(e.errorMessage());

}

还有就是,sqlite3没有enum类型,所以,如果需要的话,另建一个表用来存储类型

/*
CREATE TABLE IF NOT EXISTS PriceType(
type VARCHAR(10) PRIMARY KEY NOT NULL,
seq INTEGER UNIQUE
);
INSERT INTO PriceType(type,seq) VALUES('支出',1);
INSERT INTO PriceType(type,seq) VALUES('收入',2);
INSERT INTO PriceType(type,seq) VALUES('吃饭',3);
INSERT INTO PriceType(type,seq) VALUES('房租',4);
INSERT INTO PriceType(type,seq) VALUES('还贷',5);
INSERT INTO PriceType(type,seq) VALUES('抽烟',6);
*/

基本的使用暂时记录到这里,后期如果有新的学习再到次记录

附件地址:http://www.it165.net/uploadfile/files/2015/0326/cppsqlite3u.zip

延伸阅读:

Tag标签: 小结  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规