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://download.csdn.net/detail/qq88468560/8535969