[原]SQLite的學習系列之擷取資料庫版本

來源:互聯網
上載者:User

標籤:

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.