SQlite資料庫的C編程介面(二) 資料庫連接 ——《Using SQlite》讀書筆記

來源:互聯網
上載者:User

SQlite資料庫的C編程介面(二) 資料庫連接   by斜風細雨QQ:253786989   
2012-02-03

庫初始化

int sqlite3_initialize(void);int sqlite3_shutdown(void);

  在使用SQlite Library之前,首先應該調用sqlite3_initialize函數,該函數將分配資源,初始化一些必要的資料結構。與之配合使用的另一個函數是sqlite3_shutdown,該函數用來釋放由sqlite3_initialize分配的資源。不過在很多客戶的應用程式中通常直接調用sqlite3_open或者另一些主要的API函數,這些函數會自動初始化SQlite library(如果它還沒有被初始化的話)。不過還是推薦客戶應用程式顯示調用這兩個APIs函數來完成SQlite library的初始化和最後的清理工作。

開啟資料庫

int sqlite3_open(  const char *filename,   /* Database filename (UTF-8) */  sqlite3 **ppDb          /* OUT: SQLite db handle */);int sqlite3_open16(  const void *filename,   /* Database filename (UTF-16) */  sqlite3 **ppDb          /* OUT: SQLite db handle */);int sqlite3_open_v2(  const char *filename,   /* Database filename (UTF-8) */  sqlite3 **ppDb,         /* OUT: SQLite db handle */  int flags,              /* Flags */  const char *zVfs        /* Name of VFS module to use */);

  在執行任何SQL語句之前,必須首先串連到一個資料庫,也就是開啟或者建立一個SQlite3資料庫檔案。串連資料庫由sqlite3_open函數完成,它一共有上面3個版本。其中 sqlite3_open函數假定SQlite3資料庫檔案名為UTF-8編碼,sqlite3_open_v2是它的加強版。sqlite3_open16函數假定SQlite3資料庫檔案名為UTF-16(Unicode寬字元)編碼。

  所有這三個函數,參數filename是要串連的SQlite3資料庫檔案名字串。參數ppDb看起來有點複雜,它是一個指向指標的指標。當調用sqlite3_open_xxx函數時,該函數將分配一個新的SQlite3資料結構,然後初始化,然後將指標ppDb指向它。所以客戶應用程式可以通過sqlite3_open_xxx函數串連到名為filename的資料庫,並通過參數ppDb返回指向該資料庫資料結構的指標。

  範例程式碼:

  sqlite3 *pDB = NULL;  Status rc = sqlite3_open("database.sqlite3", &pDB);

  對於sqlite3_open和sqlite3_open16函數,如果可能將以可讀可寫的方式開啟資料庫,否則以唯讀方式開啟資料庫。如果要開啟的資料庫檔案不存在,就建立一個。對於sqlite3_open_v2函數,情況就要複雜一些了,因為這個v2版本的函數強大就強大在它可以對開啟(串連)資料庫的方式進行控制,具體是通過它的參數flags來完成。sqlite3_open_v2函數只支援UTF-8編碼的SQlite3資料庫檔案。

  如flags設定為SQLITE_OPEN_READONLY,則SQlite3資料庫檔案以唯讀方式開啟,如果該資料庫檔案不存在,則sqlite3_open_v2函數執行失敗,返回一個error。如果flags設定為SQLITE_OPEN_READWRITE,則SQlite3資料庫檔案以可讀可寫的方式開啟,如果該資料庫檔案本身被作業系統設定為防寫保護狀態,則以唯讀方式開啟。如果該資料庫檔案不存在,則sqlite3_open_v2函數執行失敗,返回一個error。如果flags設定為SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,則SQlite3資料庫檔案以可讀可寫的方式開啟,如果該資料庫檔案不存在則建立一個。這也是sqlite3_open和sqlite3_open16函數的預設行為。除此之外,flags還可以設定為其他標誌,具體可以查看SQlite官方文檔。

  參數zVfs允許客戶應用程式命名一個虛擬檔案系統(Virtual File System)模組,用來與資料庫連接。VFS作為SQlite library和底層儲存系統(如某個檔案系統)之間的一個抽象層,通常客戶應用程式可以簡單的給該參數傳遞一個NULL指標,以使用預設的VFS模組。

  對於UTF-8編碼的SQlite3資料庫檔案,推薦使用sqlite3_open_v2函數進行串連,它可以對資料庫檔案的開啟和處理操作進行更多的控制。

  SQlite3資料庫檔案的副檔名沒有一個標準定義,比較流行的選擇是.sqlite3、.db、.db3。不過在Windows系統平台上,不推薦使用.sdb作為 SQlite3資料庫檔案的副檔名,據說這會導致IO速度顯著減慢,因為.sdb副檔名有其特殊用義。

關閉資料庫

int sqlite3_close(sqlite3 *);

  在使用完SQlite資料庫之後,需要調用sqlite3_close函數關閉資料庫連接,釋放資料結構所關聯的記憶體,刪除所有的臨時資料項目。如果在調用sqlite3_close函數關閉資料庫之前,還有某些沒有完成的(nonfinalized)SQL語句,那麼sqlite3_close函數將會返回SQLITE_BUSY錯誤。客戶程式員需要finalize所有的預先處理語句(prepared statement)之後再次調用sqlite3_close。

範例程式碼

#include "sqlite3.h"#include <stdlib.h>int main( int argc, char **argv ){    Char *file = "database.sqlite3";    sqlite3 *pDB = NULL;    int rc = 0;    sqlite3_initialize( );    rc = sqlite3_open_v2( file, &db, SQLITE_OPEN_READWRITE |          SQLITE_OPEN_CREATE, NULL );    if ( rc != SQLITE_OK)     {sqlite3_close( db );exit( -1 );    }        /*  perform database operations  */        sqlite3_close( db );    sqlite3_shutdown( )}

SQlite資料庫的C編程介面(二) 資料庫連接   by斜風細雨QQ:253786989   
2012-02-03

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.