sqlite3编程使用简介
sqlite3使用范围SQLite不同于其他大部分的SQL数据库引擎,因为它的首要设计目标就是简单化:1.易于管理2.易于使用3.易于嵌入其他大型程序4.易于维护和配置 许多人喜欢SQLite因为它的小巧和快速.但是这些特性只是它的部分优点,使用者还会发现SQLite是非常稳定的.出色的稳定性源于它的简单,越简单就越不容易出错.除了上述的简单、小巧和稳定性外,最重要的在于SQLite力争做到简单化. 简单化在一个数据库引擎中可以说是一个优点,但也可能是个缺点,主要决定于你想要做什么.为了达到简单化,SQLite省略了一些人们认为比较有用的特性,例如高并发性、严格的存取控制、丰富的内置功能、存储过程、复杂的SQL语言特性、XML以及Java的扩展,超大的万亿级别的数据测量等等.如果你需要使用上述的这些特性并且不介意它们的复杂性,那么SQLite也许就不适合你了.SQLite没有打算作为一个企业级的数据库引擎,也并不打算和Oracle或者PostgreSQL竞争. 仅凭经验来说SQLite适用于以下场合:当你更看中简单的管理、使用和维护数据库,而不是那些企业级数据库提供的不计其数的复杂功能的时候,使用SQLite是一个比较明智的选择.事实也证明,人们在许多情况下已经清楚的认识到简单就是最好的选择. SQLite最佳试用场合
sqlite3基础SQLite的源代码是C,其源代码完全开放。SQLite第一个Alpha版本诞生于2000年5月。他是一个轻量级的嵌入式数据库。 目标:易于管理、操作、维护、自定义以及提供易用的编程接口 SQLite有以下特性(优点)
SQLite的缺点
SQLite的内部结构
在内部,SQLite由以下几个组件组成:SQL编译器、内核、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得更加方便。所有SQL语句都被编译成易读的、可以在SQLite虚拟机中执行的程序集。 1.接口将SQL语句传给SQL编译器
制作一个静态的sqlite3.lib文件制作一个叫静态的sqlite3.lib文件 ; 生成的sqlite3.lib静态库文件有2M多,使用时每次编译都很慢,最后生成的exe文件也很大,不过单独运行exe文件就行了,不需要(sqlite3.lib,sqlite3.dll)。生成动态的sqlite3.lib,与sqlite3.dll一起使用使用VC将sqlite3.def转化为sqlite3.lib,此生成的动态的sqlite3.lib文件只有40多k。 所使用工程编译会比较快,编译时,sqlite.lib文件要放在工程目录中;运行时,sqlite.dll文件要放在与exe文件同一个目录中,且此目录不需要sqlite.lib文件。由源码来制作sqlite.dll文件1.新建工程sqlite3,WIN32项目-->DLL(D),空项目-->完成。 2.把sqlite-amalgamation-3071700.zip中的sqlite3.c,sqlite3.h,sqlite3ext.h和sqlite-dll-win32-x86-3071700.zip中的sqlite3.def放到工程中,并把他们添加到解决方案中,3.项目属性-->连接器,输入-->模块定义文件:sqlite.def;编译,会出现如下 错误 8 error LNK2001: 无法解析的外部符号 sqlite3_table_column_metadata E:workPlaceVS2010ProjectMFCDLLsqlite3sqlite3.def 1 sqlite3 错误 7 error LNK2001: 无法解析的外部符号 sqlite3_column_table_name16 E:workPlaceVS2010ProjectMFCDLLsqlite3sqlite3.def 1 sqlite3 错误 6 error LNK2001: 无法解析的外部符号 sqlite3_column_table_name E:workPlaceVS2010ProjectMFCDLLsqlite3sqlite3.def 1 sqlite3 错误 5 error LNK2001: 无法解析的外部符号 sqlite3_column_origin_name16 E:workPlaceVS2010ProjectMFCDLLsqlite3sqlite3.def 1 sqlite3 错误 4 error LNK2001: 无法解析的外部符号 sqlite3_column_origin_name E:workPlaceVS2010ProjectMFCDLLsqlite3sqlite3.def 1 sqlite3 错误 3 error LNK2001: 无法解析的外部符号 sqlite3_column_database_name16 E:workPlaceVS2010ProjectMFCDLLsqlite3sqlite3.def 1 sqlite3 错误 2 error LNK2001: 无法解析的外部符号 sqlite3_column_database_name E:workPlaceVS2010ProjectMFCDLLsqlite3sqlite3.def 1 sqlite34.解决办法,在sqlite.c文件中,顶部添加 #ifndef SQLITE_ENABLE_COLUMN_METADATA # define SQLITE_ENABLE_COLUMN_METADATA #endif然后,在编译,会生成sqlite.lib(48k)和sqlite.dll(debug版本780多k,release版本,500多k),使用DLL Export Viewer工具打开sqlite3.dll文件会看到有207个函数。 5.加密 SQLite的作者早就考虑到以后数据加密的需求,所以预留了加密接口,我们只需要完成这些接口,就可以让它保存的数据变成密文。在说怎么加入加密功能之前,先简单说一下SQLite的文件。它非常简单和紧凑,只有 sqlite3.h 和 sqlite3.c 两个文件,.h文件定义了一些宏和全部接口,.c文件就是接口实现,我们主要修改.c文件的实现。原文即加密源代码 VC++下的sqlite数据库加密 要打开加密功能,需要定义一个宏。并在sqlite.def中添加一个导出函数:sqlite3_key. #ifndef SQLITE_HAS_CODEC # define SQLITE_HAS_CODEC #endif定义该宏之后,重新编译代码,发现现在编译不通过了,提示有5个函数并没有实现,它们分别是: --------这些实现可以在网上找到。 int sqlite3CodecAttach(sqlite3 * db,int nDB,const void * pKey,int nKeyLen) void sqlite3CodecGetKey(sqlite3 * db,void ** Key,int * nKey) int sqlite3_key(sqlite3 * db,int nKey) int sqlite3_rekey(sqlite3 * db,int nKey) void sqlite3_activate_see(const char * right) 对sqlite3 API进一步封装SQLite语法备忘录(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |