本文为笔者首次在CSDN上开博,博文风格需要探索,先共享一下开发C++工程时,使用sqlite3的关键性方法做福利贴,以期开门红。
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起MysqL、Postgresql这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。sqlite第一个Alpha版本诞生于2000年5月。 至今已经有14个年头,sqlite也迎来了一个版本 sqlite 3已经发布。
笔者看来,sqlite3类似于微软的Access,可以嵌入在应用程序中,以动态库方式调用,常用的方法就是3,4个,易学易用,同时支持sql98语法,常用的sql语法可直接用,效率还是杠杠的。比起在INI,或者XML文件等方式存储数据方便多了。而且还是标准的数据库方式。 但是sqlite不支持远程数据库,定位就是小型的嵌入式数据库,选择时看看场景是否合适。
闲言少许,开始正题,直接粘贴处源码。(开发时使用的是C++ builder工具,一下代码中有几个地方为C++ builder的语法,有需要的可以可以自己修改一下)
说明如下:
1.sqlite3使用sqlite3_open()方法中的DB文件路径,如果出现中文字符会打不开的,以为sqlite默认使用UTF-8编码,需要路径转换成UTF-8编码才行;(笔者一开始使用的是相对路径,不存在此问题,后来设计应用程序开机自启动时就出现DB文件打不开,最后确定是中文路径的问题)
2.sqlite3_exec()第三个参数为一个回调函数,一般Insert,update,delete操作时用不到,赋值NULL即可;只用在查询多条记录,多字段的情况用回调比较好,回调后逐条调用查询中的记录;(笔者的方法主要是将表中的记录全部显示到ListView中)
3.ifExitByEQId()方法中调用的sqlite3_get_table()可以实现和sqlite3_exec()通用的功能(只能用在查询中),但是不用回调函数。参数dbResult是一个存储所有查询结果的一维数组,索引0~nColumn中为表头,后面的是查询记录;
4.笔者建议,如果查询大量记录最好还是使用sqlite3_exec() + 回调函数的方式,避免写循环代码;如果查询单个记录或者几个记录字段时可以考虑sqlite3_get_table(),直接在调用的地方处理结果,比较实用。
开发时参考了一些网上的资料,到写本文的时候已经记不太清具体是那些了,特此声明一下。