標籤:
最先瞭解到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 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的學習系列之擷取資料庫版本