SQLite3源程序分析.doc

  1. 1、本文档共52页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
SQLite3源程序分析,sqlite源码分析,sqlite3源码分析,sqlite性能分析,sqlite入门与分析,sqlite源码分析pdf,sqlite分析,sqlite文件格式分析,sqlite,sqlite3

SQLite3源程序分析 作者:空转 本文分析的SQLite版本为3.6.18。现在已经变成3.6.20了,但本文中所涉及的内容变化不大。读者最好能下载一个源程序,然后将本文与源程序对照阅读。这样也有利于发现本文的错误,说实话吧,我写的时候是连分析带猜的,错误肯定很多。 参考文献: 1-The Definitive Guide to SQLite . Michael Owens:比较经典的SQLite著作。我边看边翻译了其中的部分内容,但翻得不好,大家还是看原文吧。 2-SQLite文件格式分析_v102 . 空转:我写的,写得特好。现在是v102版,跟前面的版本相比增加了不少背景知识,对文件格式的介绍算是很全面了。看本文之前,应该先浏览一下此参考文献。 SQLite3程序分析 主程序流程 所谓“主程序”是指SQLite所提供的命令行处理程序(CLP)。通过对它的分析可以对SQLite源程序建立整体概念,比一上来就直接分析单独API的处理过程要容易。CLP的主要程序都在shell.c中。 CLP的执行流程很简单:循环接受用户输入的SQL命令,处理SQL命令。命令的执行都是调用sqlite3_exec()函数完成,也就是采用的是“执行封装的Query”的形式[1]。 程序定义了一个功能比较强大的回叫函数来处理SQL命令执行的返回结果: static int callback(void *pArg, int nArg, char **azArg, char **azCol); 程序定义了9种回显的形式,通过一个callback_data结构来对回显参数进行配置。 程序主函数 程序的main()函数在shell.c的尾部,简化后的main()函数的执行过程主要分为5步: 设置回显参数 取数据库文件名 打开数据库 循环处理SQL命令 关闭数据库 如下: int main(int argc, char **argv){ struct callback_data data; //回显参数 int rc = 0; Argv0 = argv[0]; main_init(data); //设置默认的回显形式 //取数据库文件名,如没有,默认为内存数据库 data.zDbFilename = argv[1]; data.out = stdout; /* 如果数据库文件存在,则打开它。 ** 如果不存在,先不打开(现在什么都不做), ** 可以防止用户因错误的输入而创建空文件。 */ if( access(data.zDbFilename, 0)==0 ){ open_db(data); } printf( SQLite version %s\n Enter \.help\ for instructions\n Enter SQL statements terminated with a \;\\n, sqlite3_libversion() ); rc = process_input(data, 0); if( db ){ //关闭数据库 if( sqlite3_close(db)!=SQLITE_OK ){ fprintf(stderr,error closing database: %s\n, sqlite3_errmsg(db)); } } return rc; } 说明:上述函数与源程序相比做了很大的简化,去掉的部分不是不重要的,而是“可以不解释”的。实用程序的流程一般都是复杂的,SQLite也不例外。本文按照自己的主线进行介绍,只求能说明问题(自圆其说),主线之外的东西,不管重不重要,都尽量忽略。后面的函数也存在这样情况,就不再说明了。 回显参数的设置就不再介绍了,参考源程序的callback()函数和callback_data结构,有关回叫函数的使用见参考文献一。下面介绍数据库的打开过程。 打开数据库 数据库文件的打开过程在SQLite的权威文档中有介绍,过程如下图: 图1-1 数据库文件的打开过程 在CLP中打开数据库,比上图又多了两层,其调用层次如下: 1-main(): 位于shell.c。 从命令行参数中得到数据库名,如果数据库文件存在,则打开它。 2-open_db(): 位于shell.c。 功能:确认数据库是否已经打开。如果已打开,则什么都不做。如果没有,则打开它。如果打开失败,输出一个错误信息。 3-sqlite3_open(): 位于main.c。 功能:打开一个数据库。 该函数中只包含对opendatabase()的调用,但调用的参数与sqlite3_open_v2()所使用的参数不同。 4-openda

您可能关注的文档

文档评论(0)

mydoc + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档