当前位置: 代码迷 >> SQL >> CppSQLite3U使用总结
  详细解决方案

CppSQLite3U使用总结

热度:95   发布时间:2016-05-05 10:40:53.0
CppSQLite3U使用小结

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

  相关解决方案