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