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

來源:互聯網
上載者:User

標籤:

本系列文章主要是使用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

    └── sql_src

        ├── sqlite3.c

        └── sqlite3.h

 

  

  三、在main.cpp中調用sqlite的代碼如下:

    

/** * We get the version of the SQLite database. This time we will use an SQL query. */#include <iostream>#include "./sql_src/sqlite3.h"using namespace std;int main() {    sqlite3 *db;    sqlite3_stmt *res;    const char *file = "test.db";    int rc = sqlite3_open(file, &db);    if (rc != SQLITE_OK) {        cout << "Cannot open database: " << sqlite3_errmsg(db) << endl;        sqlite3_close(db);        exit(1);    }    rc = sqlite3_prepare_v2(db, "SELECT SQLITE_VERSION()", -1, &res, 0);    if (rc != SQLITE_OK) {        cout << "Failed to fetch data: " << sqlite3_errmsg(db) << endl;        sqlite3_close(db);        exit(1);    }    rc = sqlite3_step(res);    if (rc == SQLITE_ROW) {        cout << sqlite3_column_text(res, 0) << endl;    }    sqlite3_finalize(res);    sqlite3_close(db);    return 0;}

  四、最後的運行結果如下:

  

3.7.14Process finished with exit code 0

  

  調用分析:

sqlite3 *db;

  1、該sqlite3的結構定義了一個資料庫控制代碼。每個開啟的SQLite資料庫是由資料庫控制代碼表示。

 

sqlite3_stmt *res;

  2、該sqlite3_stmt結構代表一個SQL語句。

 

int rc = sqlite3_open(file, &db);

  3、該sqlite3_open()函數開啟一個新的資料庫連接。其參數是資料庫名稱和資料庫控制代碼。在“test.db的”是採用了特殊的資料庫名稱導致開啟一個記憶體資料庫。函數的返回碼指示資料庫是否被成功開啟。當串連成功建立,則返回SQLITE_OK。

 

if (rc != SQLITE_OK) {        cout << "Cannot open database: " << sqlite3_errmsg(db) << endl;        sqlite3_close(db);        exit(1);    }

  4、如果傳回碼指示錯誤,我們列印郵件到控制台,關閉資料庫處理,並終止該計劃。該sqlite3_errmsg()函數返回錯誤的描述。它是否被開啟時發生錯誤,與資料庫連接控制代碼相關聯的資源,應通過使其向sqlite3_close()函數釋放。

 

rc = sqlite3_prepare_v2(db, "SELECT SQLITE_VERSION()", -1, &res, 0);    if (rc != SQLITE_OK) {        cout << "Failed to fetch data: " << sqlite3_errmsg(db) << endl;        sqlite3_close(db);        exit(1);    }

  5、執行SQL語句之前,必須調用首先被編譯成位元組代碼的sqlite3_prepare功能之一。 (該sqlite3_prepare()函數被棄用。)

  sqlite3_prepare_v2()函數有五個參數。

  第一個參數是從所述sqlite3_open()函數獲得的資料庫控制代碼。

  第二個參數是要編譯的SQL語句。

  第三個參數為以位元組為單位的SQL語句的最大長度。傳遞-1會導致讀取SQL字串到第一個零終止子字串結束了。根據該檔案,可以通過傳遞提供的SQL字串的位元組的確切數量獲得一些小的效能優勢。

  第四個參數是語句控制代碼。這將指向先行編譯的語句,如果sqlite3_prepare_v2()成功運行

  最後一個參數是一個指向SQL語句的未使用的部分。只有SQL字串的第一個語句被編譯,所以參數指向剩下什麼未編譯。我們傳入0,因為該參數對我們不是很重要。

  如果成功,sqlite3_prepare_v2()返回SQLITE_OK;否則錯誤碼返回

 

  

rc = sqlite3_step(res);

  6、調用sqlite3_step()運行SQL語句。 SQLITE_ROW返回碼錶示有另一行準備。我們的SQL語句返回只有一行資料,因此,我們調用這個函數一次。

  

sqlite3_finalize(res);

  7、該sqlite3_finalize()函數銷毀準備語句對象。

 

sqlite3_close(db);

  8、該sqlite3_close()函數關閉資料庫連接。

  

 

[原]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.