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. [转载]SMTP的几个端口的比较

    出处:https://blog.csdn.net/zhangyuan12805/article/details/78781330 1. SMTP Port 25: 25口是四个端口中最老的.这是在33 ...

  2. 用javaScript对页面元素进行显示和隐藏

    将显示元素进行隐藏 用document.getElementById("ID名").hidden=ture;根据页面元素ID名获得页面元素值,进而将其属性设置成隐藏. 将隐藏元素进 ...

  3. Qt::WindowFlags枚举类型解析

    在使用Qt设计的时候经常会看到QWidget控件的构造函数出现下面这样一句话: QWidget(QWidget *parent=0,Qt::WindowFlags f=0) QWidget *pare ...

  4. 给zabbix添加percona监控模板

    简单说明一下给zabbix添加的percona的监控模板. 在percona官方网站有说明怎么安装,这里记录下步骤.首先搭建好的zabbix环境. 监控插件连接 : 链接:https://pan.ba ...

  5. [c/c++] programming之路(14)、数组+冒泡和选择排序

    一.数组的基本知识 #include<stdio.h> #include<stdlib.h> void main0(){ ]={,,,,};//数组在内存里是连续排列的 int ...

  6. linux基础之find

    linux上文件查找工具: locate, find locate: 依赖于事先构建的索引,索引的构建在系统较为空闲时自动进行(周期性任务),手动更新数据库(updatedb) 索引构建过程需要遍历整 ...

  7. oracle的存储过程的作用

    oracle的存储过程的作用 1.存储过程可以使得程序执行效率更高.安全性更好,因为过程建立之后 已经编译并且储存到数据库,直接写sql就需要先分析再执行因此过程效率更高,直接写sql语句会带来安全性 ...

  8. Vue:(三)路由

    (一)基础介绍 vue-router用来构建SPA <router-link></router-link>或者this.$router.push({path:' '}) < ...

  9. tcp协议以及socket介绍

    壹:tcp协议:可靠传输 一: 3次握手,建立链接:4次挥手,断开链接 3次握手,建立链接:图解 ,这样双向通路就建立完成了. 在建立链接时,并没有数据传输,所以中间两部可以合在一起,也就是3次握手, ...

  10. MyEclipse运行Java出错:could not find the main class:test.program will exit(导入项目)

    自己新建的项目运行没有任何问题.但是我导入的很早以前别人写的项目,然后run就会弹框could not find the main class:test.program will exit 请确认JA ...