最先了解到SQLite是基于其作为移动客户端数据存储平台,以下是其官网(https://www.sqlite.org/)关于SQLite的一段介绍:

     SQLite是遵守ACID的轻型数据库引擎,它包含在一个相对小的C库中。它是D.RichardHipp创建的公有领域项目。SQLite第一个Alpha版本诞生于2000年5月,至今已经有16个年头,当前版本为3.12.2.。不像常见的客户端/服务器结构范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个,数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。

  sqlite3.c文件去掉注释信息,整个文件大小只有25000行代码,导入到工程以后,可以随时查看以及调试相关的代码,对于理解sqlite有着极大的帮助。

  本系列文章主要是使用C++语言来调用其API,达到管中窥豹的目的。另外本文使用的开发环境为mac + clion,并且基于SQLite 3.7.14来进行开发.

  一、去下载sqlite-amalgamation-3071400.zip,然后解压到文件夹(其结构目录树如下):

    .

    ├── shell.c

    ├── sqlite3.c

    ├── sqlite3.h

    └── sqlite3ext.h

  二、新建一个sql_tutorial的工程,景sqlite3.c和sqlite3.h文件拷贝到sql_src目录下:

    

  三、在main.cpp中调用sqlite的代码如下:

    

#include <iostream>

using namespace std;

#include "./sql_src/sqlite3.h"

int main() {
cout << "sqlite libversion : " << sqlite3_libversion() << endl;
return ;
}

  四、因为clion使用的时cmake编译,需要在CMakeLists.txt中添加相关sqlite的代码编译选项:

    

cmake_minimum_required(VERSION 3.3)
project(sql_tutorial1) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") set(SOURCE_FILES main.cpp sql_src/sqlite3.c)
add_executable(sql_tutorial1 ${SOURCE_FILES})

  关于代码调用流程分析:

  1、跟踪查看sqlite3_libversion()的实现,可以看到sqlite3.h中关于其声明:

SQLITE_API const char *sqlite3_libversion(void);

  2、具体实现在sqlite3.c中:

/* IMPLEMENTATION-OF: R-53536-42575 The sqlite3_libversion() function returns
** a pointer to the to the sqlite3_version[] string constant.
*/
SQLITE_API const char *sqlite3_libversion(void){ return sqlite3_version; }

  3、而sqlite3_version的定义:

#ifndef SQLITE_AMALGAMATION
/* IMPLEMENTATION-OF: R-46656-45156 The sqlite3_version[] string constant
** contains the text of SQLITE_VERSION macro.
*/
SQLITE_API const char sqlite3_version[] = SQLITE_VERSION;
#endif

  4、而SQLITE_VERSION宏定义如下:

#define SQLITE_VERSION        "3.7.14"

  这里const char *sqlite3_libversion(void){ return sqlite3_version; } 返回的就是默认的是数组的第一个元素,数组的地址指向数组的第一个元素,即此处的返回的就是宏定义的SQLITE_VERSION。

  至此整个程序的调用流程分析完成,调用sqlite3_libversion最终返回的是sqlite3.c中的SQLITE_VERSION来代表的数据版本号。

[原]SQLite的学习系列之获取数据库版本的更多相关文章

  1. [原]SQLite的学习系列之获取数据库版本二

    本系列文章主要是使用C++语言来调用其API,达到管中窥豹的目的.另外本文使用的开发环境为mac + clion,并且基于SQLite 3.7.14来进行开发. 一.去下载sqlite-amalgam ...

  2. [python][django学习篇][5]选择数据库版本(默认SQLite3) 与操作数据库

    推荐学习博客:http://zmrenwu.com/post/6/ 选择数据库版本(SQLite3) 如果想选择MySQL等版本数据库,请先安装MySQL并且安装python mysql驱动,这里不做 ...

  3. Django学习路14_获取数据库中用户名字并展示,获取指定条数

    在 views.py 中添加 获取函数 注:此时获取的是全部用户的信息 def get_users(request): users = User.objects.all() context = { ' ...

  4. hive 学习系列二(数据库的创建删除修改) 拿走,不谢。

    database 相当于一个目录或者命名空间,用来更好地进行表的管理 在hdfs 的目录位置大致如下: [root@iZbp12vtv76y9q3d633bh6Z /]# hadoop fs -ls ...

  5. 【SQL Server 学习系列】-- 获取字符串中出现某字符的次数及字符某次出现的下标

    ) = '1_BB_CC_DD_AA_EE_YY_WW_HH_GG' --// 1. 获取下划线在字符串中出现的次数 SELECT LEN(@Str) - LEN(REPLACE(@Str, '_', ...

  6. 【SQL Server 学习系列】-- 收缩数据库文件大小

    USE WebExam; GO ALTER DATABASE WebExam SET RECOVERY SIMPLE; GO -- 收缩文件到 1 MB. ); GO ALTER DATABASE W ...

  7. Git学习系列之集中式版本控制系统vs分布式版本控制系统

    不多说,直接上干货! Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢? 先说集中式版本控制系统,版本库是集中存放在中央 ...

  8. Exploiting second-order SQL injection 利用二阶注入获取数据库版本信息 SQL Injection Attacks and Defense Second Edition

    w SQL Injection Attacks and Defense  Second Edition Exploiting second-order SQL injection Virtually ...

  9. Android+Jquery Mobile学习系列(5)-SQLite数据库

    SQLite是轻量级的.嵌入式的.关系型数据库,目前已经在iPhone.Android等手机系统中使用,SQLite可移植性好,很容易使用,很小,高效而且可靠. 因为Android已经集成了SQLit ...

随机推荐

  1. 再谈:jquery编写插件的方法

    版权声明:作者原创,转载请注明出处! 编写插件的两种方式: 1.类级别开发插件(1%) 2.对象级别开发(99%) 类级别的静态开发就是给jquery添加静态方法,三种方式 1.添加新的全局函数 2. ...

  2. [2]. jekyll安装与应用

    一.ruby安装 这里在win下安装ruby,对应自己电脑的操作系统位数,如我的是64位,对应下载Ruby 2.0.0-p353 (x64)这个版本的ruby.然后安装过程就很简单了: 命令行下输入r ...

  3. 使用Lucene.NET实现数据检索功能

    引言     在软件系统中查询数据是再平常不过的事情了,那当数据量非常大,数据存储的媒介不是数据库,或者检索方式要求更为灵活的时候,我们该如何实现数据的检索呢?为数据建立索引吧,利用索引技术可以更灵活 ...

  4. HTML5游戏开发进阶指南(亚马逊5星畅销书,教你用HTML5和JavaScript构建游戏!)

    HTML5游戏开发进阶指南(亚马逊星畅销书,教你用HTML5和JavaScript构建游戏!) [印]香卡(Shankar,A.R.)著 谢光磊译 ISBN 978-7-121-21226-0 201 ...

  5. eclipse 打开是报错"reload maven project has encountered a problem"

    不需要删除整个 .metadata 如果删除这个代价是重新导入全部项目 D:\eclipse-workspace\.metadata\.plugins\org.eclipse.e4.workbench ...

  6. ESXi5 中克隆Linux虚拟主机的网络配置

    虚拟化技术果然非常方便,尤其是windows主机,克隆后在网络管理中改一下IP即可. 但对于Linux来说就有点麻烦,只修改IP还不行,还有MAC地址,网卡指定等,这个规程对应新手来说没有大半天搞不定 ...

  7. python安装包工具pip的安装

    官方的安装帮助页面:http://pip.readthedocs.org/en/latest/installing.html windows: 下载代码get-pip.py, 运行该代码, 这个代码会 ...

  8. TCP_NODELAY 和 TCP_CORK主要区别

    一句话总结: tcp_nodelay:禁止nagle算法,有需要发送的就立即发送,比较常见 tcp_cork:它是一种加强的nagle算法,过程和nagle算法类似,都是累计数据然后发送.但它没有 n ...

  9. 使用visualVM 1.3.8(visualvm_138-ml.zip) 监控远程Tomcat运行情况

    服务端CentOS6.4 x64安装的是jdk1.7 下载visualVM1.3.8-ml 也就是多语言版本,包含中文,界面用起来方便.官方下载地址比较慢,百度上搜索的都是csdn,51cto等必须登 ...

  10. JavaScript 调试小技巧

    'debugger;' 除了console.log,debugger就是另一个我很喜欢的快速调试的工具,将debugger加入代码之后,Chrome会自动在插入它的地方停止,很像C或者Java里面打断 ...