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

摘要:
3、 在main.cpp中调用sqlite的代码如下:#include“./sql_src/sqlite3。h“intmain(){cout<

  最先了解到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目录下:

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

 

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

    

#include <iostream>

using namespace std;

#include "./sql_src/sqlite3.h"

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

  四、因为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的学习系列之获取数据库版本》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java实现 LeetCode 805 数组的均值分割 (DFS+分析题)动画系统下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WebAPI 实现前后端分离的示例

转自:http://www.aspku.com/kaifa/net/298780.html 随着Web技术的发展,现在各种框架,前端的,后端的,数不胜数。全栈工程师的压力越来越大。 现在的前端的框架,既可以做各种Web,又可以做各种APP,前端框架更新换代越来越快,越来越多。 传统的模式 前端和后端进行调试,修改都非常麻烦。往往前端配合后端很痛苦,后...

java使用jdbc对sqlite 添加、删除、修改的操作

package com.jb.jubmis.Dao.DaoImpl; import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import...

11.汇编代码简单操作

11.汇编代码简单操作 使用汇编的原因很简单,就是汇编代码的高效。在机器启动的时候,利用汇编的高效,对硬件进行初始化,为加载内核,提供条件。 目前常用的ARM汇编指令有两种: *ARM标准汇编:适用于ARM公司的汇编器,适合在Windows平台下使用。 *GNU汇编:使用与GNU交叉编译工具链中的汇编器,适合于Linux平台开发。 3.汇编...

Spring-AOP(面向切面编程)

什么是AOP   AOP是Spring提供的关键特性之一。AOP即面向切面编程,是OOP编程的有效补充。使用AOP技术,可以将一些系统性相关的编程工作,独立提取出来,独立实现,然后通过切面切入进系统。从而避免了在业务逻辑的代码中混入很多的系统相关的逻辑——比如权限管理,事物管理,日志记录等等。这些系统性的编程工作都可以独立编码实现,然后通过AOP技术切入...

防止表单重复提交的方法

1、在jsp页面的button添加相关js代码: <input type="button" value="提交" onclick="this.disabled=true;this.form.submit()"> 此方法缺点是用户可能禁用js,此方法就可能失效。 2、session的token机制...

Ubuntu下添加开机启动项的2种方法

1、方法一,编辑rc.loacl脚本 Ubuntu开机之后会执行/etc/rc.local文件中的脚本,所以我们可以直接在/etc/rc.local中添加启动脚本。当然要添加到语句:exit 0 前面才行。如: 复制代码 代码如下: sudo vi /etc/rc.local 然后在 exit 0 前面添加好脚本代码。 2、方法二,添加一个Ubuntu的...