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 = ;

    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 (); } else TRACE("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 , , , &zErrMsg ); //插入数据 sql = "INSERT INTO \"test\" VALUES(NULL , 1 , 1 , '200605011206', 18.9 );" ; sqlite3_exec( db , sql , , , &zErrMsg ); int nrow = , ncolumn = ; //查询结果集的行数、列数 char **azResult; //二维数组存放结果 //查询数据 sql = "SELECT * FROM test "; sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg ); int i = ; printf( "row:%d column=%d \n" , nrow , ncolumn ); printf( "\nThe result of querying is : \n" ); for( i= ; i<( nrow + ) * ncolumn ; i++ ) printf( "azResult[%d] = %s\n", i , azResult[i] ); //删除数据 sql = "DELETE FROM test WHERE AGE = 1 ;" ; sqlite3_exec( db , sql , , , &zErrMsg ); //释放掉azResult 的内存空间 sqlite3_free_table( azResult ); sqlite3_close(db); //关闭数据库 int c=getchar();
return ;
}

值得注意的地方,在于在使用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 Unicode
int wcsLen = ::MultiByteToWideChar(CP_ACP,NULL,stransi,strlen(stransi),NULL,);
wchar_t* strunicode = new wchar_t[wcsLen+];
::MultiByteToWideChar(CP_ACP,NULL,stransi,strlen(stransi),strunicode,wcsLen);
strunicode[wcsLen] = '\0';
//Unicode To UTF-8
int utf8len = ::WideCharToMultiByte(CP_UTF8,NULL,strunicode,wcslen(strunicode),NULL,,NULL,NULL);
char* strutf8 = new char[utf8len+];
::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 Unicode int wlen = ::MultiByteToWideChar(CP_UTF8,NULL,strutf8,strlen(strutf8),NULL,);
wchar_t* strunicode = new wchar_t[wlen+];
::MultiByteToWideChar(CP_UTF8,NULL,strutf8,strlen(strutf8),strunicode,wlen);
strunicode[wlen] = '\0'; //Unicode To Ansi
int ansilen = ::WideCharToMultiByte(CP_ACP,NULL,strunicode,wcslen(strunicode),NULL,,NULL,NULL);
char* szAnsi = new char[ansilen+];
::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

VC++、MFC Sqlite3数据库的使用的更多相关文章

  1. VC++/MFC(VC6)开发技术精品学习资料下载汇总

    工欲善其事,必先利其器,VC开发MFC Windows程序,Visual C++或Visual Studio是必须的,恩,这里都给你总结好了,拿去吧:VC/MFC开发必备Visual C++.Visu ...

  2. VC与ADO数据库操作

    VC与ADO数据库操作 学研部的同志们,大家好! 想开一次学习会,实习时间冲突了,只好把文档发给大家看了.重点推荐李振龙的BMP读图教程! 尤其是大三GIS班的同志,注意了,可能实习用得上的! 一.A ...

  3. 安卓使用SQlite3数据库无法id主键无法自动增加?不是的。

    安卓使用SQlite3数据库无法id主键无法自动增加?不是的. 要这样写:id integer primary key ,要写integer而不是int所以会报错! http://blog.csdn. ...

  4. 【转】去掉Sqlite3 数据库中的前后回车换行符(newline)

    原文: http://www.blogjava.net/pts/archive/2013/06/10/400... 时间: 2013-06-10 转自:http://www.ityuedu.com/a ...

  5. 《全唐诗》的sqlite3数据库

    下载地址: http://pan.baidu.com/s/1b2mE54quantangshi.db是sqlite3数据库,包括2张表.index表:volume 列(整数,主键) 表示卷号,从1到9 ...

  6. [Android]AndroidInject增加sqlite3数据库映射注解(ORM)

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3623050.html AndroidInject项目是我写的一 ...

  7. Cocos2dx使用wxsqlite开源加密SQLite3数据库

    最近使用wxsqlite加密sqlite3数据库,刚开始折腾好几天,在xcode上一直编译不通过,后来在sqlite3.c找到配置,编译顺利通过,太激动了,哈哈,废话少说!总结一下android和io ...

  8. VC ++ MFC activex 控件获取连接的VPN 信息

    vc++  MFC 进行activex  控件的开发步骤就不用多写了,只是简单的说明一下方法,以及具体的代码: 使用的类库是 windows 系统的 rasapi32.dll 记住需要添加的头文件如下 ...

  9. 基于s5pv210嵌入式linux系统sqlite3数据库移植

    基于s5pv210嵌入式linux系统sqlite3数据库移植 1.下载源码 http://www.sqlite.org/download.html 最新源码为3080100 2.解压 tar xvf ...

随机推荐

  1. 千行代码入门Python

    这个是从网上找到的一份快速入门python的极简教程,大概一千行左右,个人觉得不错,特此收藏以备后用. # _*_ coding: utf-8 _*_ """类型和运算- ...

  2. “Nested exception: 前言中不允许有内容"错误处理

    最近在做一个小项目,使用org.dom4j.DocumentHelper.parseText方法时一直报错”Nested exception: 前言中不允许有内容",这个parseText解 ...

  3. Python socket ssh接收大数据

    通过socket连续接收返回数据 Server服务端 import socket,os server = socket.socket() server.bind(('localhost',9999)) ...

  4. 剑指offer(36)两个链表中的第一个公共节点

    题目描述 输入两个链表,找出它们的第一个公共结点. 题目分析 我发现关于链表的题都涉及双指针,大家做的时候记得用双指针. 题目理解了就很好做了,比较简单,先在长的链表上跑,知道长的和短的一样长,再一起 ...

  5. HAProxy + Keepalived + Flume 构建高性能高可用分布式日志系统

    一.HAProxy简介 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点, ...

  6. easyUI使用dailog实现弹出框带表单功能

    本文为博主原创,未经允许不得转载: 示例如下: 需要注意的地方在id为win的div中需要有:closed="true"这个属性,这个属性为控制dailogn对话框显示与隐藏的属性 ...

  7. HDFS数据节点DataNode未启动解决方法

    在解决这个问题的过程中,我又是积累了不少经验... 首先让我搞了很久的问题是,书上说进程全部启动的命令是/bin/start-all.sh,但是当我执行的时候显示command not found.后 ...

  8. 微信小程序计算器模拟后续

    今天按着自己的思路又重打了一遍 wxml没什么说的,就是分块起名,显示数字和结果的作为屏幕,数字键盘一行四块 <view class="onTop"> <view ...

  9. 初学者易上手的SSH-struts2 03数据封装

    这一章我们一样来获取数据,看看与上一章有什么不同吧.数据封装也有三种方式.下面我们来一一介绍. 第一种:属性封装. 类就用LoginAction吧.里面有两属性,name,pwd.给这两个属性写上ge ...

  10. Could not process inbound connection: Client [/rostopic_18439_1555659423249] wants topic , ROS md5sums do not match

    报错如下: [WARN] [WallTime: ', 'md5sum': '0d0edf749cdde9f3dc5639668f40e90b', 'topic': '/bp_update_feedba ...