SQLite数据库是一种本地的轻型数据库,在存储一些本地的数据的时候,或者不需要用到Oracle,SQL2008之类的大型数据库的时候,Sqlite的优势就能够得到发挥。程序需要采集数据存储起来,可以使用这个数据库。或者觉得ini文件,txt文件在存储的过程中,数据的组织比较困难可以使用这个数据库。

同时如果是涉及嵌入式系统,SQLite的便捷性能够得到更好的体现。他将所有的方法都包含在了三个文件中:

sqlite3.h

sqlite3.c

sqlite3ext.h

附下载地址:链接:http://pan.baidu.com/s/1qYawfFY 密码:l7fq

地址失效可以私信。

在使用的过程中,最简单的办法是,你可以直接将三个文件全部添加到相应的工程中,在引用头文件之后,你就可以使用其中的方法了。

其中的增删改查可以参考如下代码使用:但是要注意自己应该添加和完善一些功能

sqlite3 *db=NULL;char *zErrMsg = 0;int rc;//打开指定的数据库文件,如果不存在将创建一个同名的数据库文件rc = sqlite3_open("zsl.db", &db);if( rc ){CString temp1;temp1.Format(_T("Can’t open database: %s\n"), sqlite3_errmsg(db));TRACE(temp1);//fprintf(stderr, "Can’t open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);return (1);}elseTRACE("You have opened a sqlite3 database named zsl.db successfully!\n");//创建一个表,如果该表存在,则不创建,//并给出提示信息,存储在zErrMsg 中char *sql = " CREATE TABLE test(ID INTEGER PRIMARY KEY,AGE INTEGER,LEVEL INTEGER,NAME VARCHAR(12),SALARY REAL);" ;sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );//插入数据
sql = "INSERT INTO \"test\" VALUES(NULL , 1 , 1 , '200605011206', 18.9 );" ;sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );int nrow = 0, ncolumn = 0; //查询结果集的行数、列数char **azResult; //二维数组存放结果//查询数据
sql = "SELECT * FROM test ";sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );int i = 0 ;printf( "row:%d column=%d \n" , nrow , ncolumn );printf( "\nThe result of querying is : \n" );for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )printf( "azResult[%d] = %s\n", i , azResult[i] );//删除数据
sql = "DELETE FROM test WHERE AGE = 1 ;" ;sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );//释放掉azResult 的内存空间
sqlite3_free_table( azResult );sqlite3_close(db); //关闭数据库int c=getchar();return 0;
}

值得注意的地方,在于在使用sqlite3 的时候,你会发现存储的过程中会出现中文的乱码,那是因为,SQLite3数据库默认的编码格式为UTF-8,所以在使用之前,需要对你的格式进行转换。

以VC++ MFC为例,如果你的程序使用的是默认Unicode编码,那么只需要Unicode->UTF-8的转换,如果你是使用的多字节字符集,那么系统默认的编码格式应该是Ansi,这时候,你需要将编码从Ansi转换到Unicode,然后从Unicode转换到UTF-8。

因为我的工程中使用的多字节,所以我这里先贴出一个Ansi转换为UTF-8的代码:

//Ansi To Utf-8 Utf-8 To Ansi
char* *****::AnsiToUtf8(char* stransi)
{//Ansi to Unicodeint wcsLen = ::MultiByteToWideChar(CP_ACP,NULL,stransi,strlen(stransi),NULL,0);wchar_t* strunicode = new wchar_t[wcsLen+1];::MultiByteToWideChar(CP_ACP,NULL,stransi,strlen(stransi),strunicode,wcsLen);strunicode[wcsLen] = '\0';//Unicode To UTF-8int utf8len = ::WideCharToMultiByte(CP_UTF8,NULL,strunicode,wcslen(strunicode),NULL,0,NULL,NULL);char* strutf8 = new char[utf8len+1];::WideCharToMultiByte(CP_UTF8,NULL,strunicode,wcslen(strunicode),strutf8,utf8len,NULL,NULL);strutf8[utf8len] = '\0';delete [] strunicode;strunicode = NULL;return strutf8;}
char* ***::Utf8ToAnsi(char* strutf8)
{//UTF-8 To Unicodeint wlen = ::MultiByteToWideChar(CP_UTF8,NULL,strutf8,strlen(strutf8),NULL,0);wchar_t* strunicode = new wchar_t[wlen+1];::MultiByteToWideChar(CP_UTF8,NULL,strutf8,strlen(strutf8),strunicode,wlen);strunicode[wlen] = '\0';//Unicode To Ansiint    ansilen = ::WideCharToMultiByte(CP_ACP,NULL,strunicode,wcslen(strunicode),NULL,0,NULL,NULL);char* szAnsi = new char[ansilen+1];::WideCharToMultiByte(CP_ACP,NULL,strunicode,wcslen(strunicode),szAnsi,ansilen,NULL,NULL);szAnsi[ansilen] = '\0';delete [] strunicode;strunicode = NULL;return szAnsi;
}

注意这段代码中,使用了2个new,但是只delete了一个,这里需要你在使用完成转换后的字符串,进行手动delete,否则可能造成内存泄漏。。

转换完成之后的显示,中文就不是乱码。

最后附上一个工具,用来查看sqlite的数据库的内容,但是因为我的电脑上的安装包没有了,所以这里只留下一个名字好了,等到之后有机会再补上链接。

名字:Navicat premium 以及他的补丁

图标是这样的:

打开之后就可以查看你创建的SQLite数据库的文件,很方便可以检查你代码的正确或者错误

连接补完计划:

链接:http://pan.baidu.com/s/1pKELaSb 密码:icay

失效私信我,或者邮箱452875117@qq.com

转载于:https://www.cnblogs.com/fudong071234/p/6424856.html

VC++、MFC Sqlite3数据库的使用相关推荐

  1. VC++使用事务来写SQLite3数据库

    如果使用VC++使用事务来写SQLite3数据库,首先要先能写库,这篇文章分为两部分,第一部分是怎么来写SQLite3数据库,第二部分怎么使用事务来写库. 第一部分写SQLite3数据库 SQLite ...

  2. VC++对Access数据库的操作(查询、插入、更新、删除等)

    Microsoft Office Access是由微软发布的关系数据库管理系统.Access数据库常应用于小型软件系统中,比如:生产管理.销售管理.库存管理等各类企业管理软件,其最大的优点是:简单易学 ...

  3. oledb vc访问mdb数据库_vc实战oledb编程

    VC 中用 ADO 和 DataGrid 控件显示和更新数据库中的数据分类: VC 编程 2010-07-06 15:58 1157 人阅读 评论(0) 收藏 举报 VC 中用 ADO 和 DataG ...

  4. VC++ MFC 多线程及线程同步(详细、全面总结!)

    更多详情:http://blog.csdn.net/whyacinth/ VC++ MFC 多线程及线程同步 关键词: MFC    多线程及线程同步                          ...

  5. VC/MFC QA 200407

    CSDN 讨论总结系列: Jiangsheng的CSDN Digest (Dec 2005)(http://blog.csdn.net/jiangsheng/archive/2005/12/24/56 ...

  6. 【数据库】sqlite3数据库备份、导出方法汇总

    [数据库]sqlite3常用命令及SQL语句 目录 1.直接拷贝数据库 2.使用.backup .clone 1)交互式 2)脚本 3.导出到csv文件中(其它格式类似) 1)交互式 2)脚本 3)导 ...

  7. c从sqlite3数据库中获取数据,并对数据进行拼接

    c从sqlite3数据库中获取数据,并对数据进行拼接 函数功能 对数据库的操作 创建数据库: 创建USER表: 创建表内数据: 查看表内数据: 查看表结构: 函数实现 函数编译: 函数结果: 函数功能 ...

  8. 【Android 逆向】应用数据目录 ( files 数据目录 | lib 应用自带 so 动态库目录 | databases sqlite3 数据库目录 | cache 缓存目录 )

    文章目录 一.应用数据目录 /data/data/package.name/files 二.自带 so 动态库 /data/data/package.name/lib 三.数据库文件 /data/da ...

  9. VC++ MFC DLL动态链接库编写详解

    虽然能用DLL实现的功能都可以用COM来替代,但DLL的优点确实不少,它更容易创建.本文将讨论如何利用VC MFC来创建不同类型的DLL,以及如何使用他们. 一.DLL的不同类型 使用VC++可以生成 ...

  10. VC/MFC中常用宏的含义

    VC/MFC中常用宏的含义 Visual C++ MFC 中常用宏的含义(转载)     AND_CATCHAND_CATCH AND_CATCH(exception_class,exception ...

最新文章

  1. hdu 4502(DP)
  2. golang逃逸分析
  3. Linux Kernel 5.10 aarch64体系对TTBR寄存器的设置
  4. CenOS7中使用Docker安装配置Redis(数据持久化与数据卷映射)
  5. HDU - 2896 病毒侵袭(AC自动机)
  6. Val编程-任务编程
  7. matlab 柯西黎曼方程,【判断题】柯西-黎曼方程成立是函数解析的必要条件.
  8. 光功率 博科交换机_如何将交换机40G QSFP+与10G SFP+端口互连?
  9. IPC--进程间通信三(共享内存)
  10. 如何跨服务器访问html 页面,html页面如何跨域访问另一页面内容,并将部分内容呈现出来?...
  11. 大众1.4t可以一直加92号汽油吗?有哪些需要注意的问题?
  12. android-circlebutton介绍
  13. 在CentOS 6上用Samba Client访问windows共享文件夹
  14. 【近万字】分数傅里叶变换课程学习笔记
  15. kubernetes英语怎么读_小学三年级英语怎么学
  16. 【2018盘点VR一体机那些事】手机VR眼镜和VR一体机有什么区别?AR,VR眼镜和VR一体机哪个好?
  17. sql 财务科目余额表写法
  18. Feb14 小白《Linux就该这么学》学习笔记1
  19. 97年大学计算机考试是 级,1997年4月等级考试一级笔试试卷、答案
  20. msg.obj与msg.what、this与super

热门文章

  1. python模块:数字处理
  2. POJ读书笔记2.1 —— 鸡兔同笼
  3. 码支付如何对接网站_做“刷脸支付”怎么推广?怎么办理刷脸支付POS机?
  4. nginx php mysql zend_性能测试基本功 - 手动配置nginx+php-cgi+zend+mysql
  5. 现代控制理论概念梳理(脑图)
  6. 蓝桥杯2016年第七届C++省赛B组第二题-生日蜡烛
  7. Android AbsoluteLayout 绝对布局
  8. matlab读取excel里的数据并用imagesc画图
  9. vue 鼠标点击事件_点击鼠标,利用VBA代码实现精准控制触发事件的第二方案
  10. docker volume mysql_docker volume的理解