sqlite3是sqlite乙個全新的版本,它雖然是在sqlite 2.8.13的**基礎之上開發的,但是使用了和之前的版本不相容的資料庫格式和api. sqlite3是為了滿足以下的需求而開發的:
因此為了支援這些特性我改變了資料庫的格式,建立了乙個與之前版本不相容的3.0版. 至於其他的相容性的改變,例如全新的api等等,都將在理論介紹之後向你說明,這樣可以使你最快的一次性擺脫相容性問題.
3.0版的和2.x版的api非常相似,但是有一些重要的改變需要注意. 所有api介面函式和資料結構的字首都由"sqlite_ "改為了"sqlite3_ ". 這是為了避免同時使用sqlite 2.x和sqlite 3.0這兩個版本的時候發生鏈結衝突.
由於對於c語言應該用什麼資料型別來存放utf-16編碼的字串並沒有一致的規範. 因此sqlite使用了普通的void* 型別來指向utf-16編碼的字串. 客戶端使用過程中可以把void*對映成適合他們的系統的任何資料型別.
sqlite 3.0一共有83個api函式,此外還有一些資料結構和預定義(#defines). (完整的api介紹請參看另乙份文件.) 不過你們可以放心,這些介面使用起來不會像它的數量所暗示的那麼複雜. 最簡單的程式仍然使用三個函式就可以完成: sqlite3_open(), sqlite3_exec(), 和 sqlite3_close(). 要是想更好的控制資料庫引擎的執行,可以使用提供的sqlite3_prepare()函式把sql語句編譯成位元組碼,然後在使用 sqlite3_step()函式來執行編譯後的位元組碼. 以sqlite3_column_開頭的一組api函式用來獲取查詢結果集中的資訊. 許多介面函式都是成對出現的,同時有utf-8和utf-16兩個版本. 並且提供了一組函式用來執行使用者自定義的sql函式和文字排序函式.
2.1 如何開啟關閉資料庫
sqlite3_open() 函式返回乙個整數錯誤**,而不是像第二版中一樣返回乙個指向sqlite3結構體的指標. sqlite3_open() 和 sqlite3_open16() 的不同之處在於sqlite3_open16() 使用utf-16編碼(使用本地主機位元組順序)傳遞資料庫檔名. 如果要建立新資料庫, sqlite3_open16() 將內部文字轉換為utf-16編碼, 反之sqlite3_open() 將文字轉換為utf-8編碼.typedef struct sqlite3 sqlite3;int sqlite3_open(const char*, sqlite3**);
int sqlite3_open16(const void*, sqlite3**);
int sqlite3_close(sqlite3*);
const char *sqlite3_errmsg(sqlite3*);
const void *sqlite3_errmsg16(sqlite3*);
int sqlite3_errcode(sqlite3*);
開啟或者建立資料庫的命令會被快取,直到這個資料庫真正被呼叫的時候才會被執行. 而且允許使用pragma宣告來設定如本地文字編碼或缺省記憶體頁面大小等選項和引數.
sqlite3_errcode() 通常用來獲取最近呼叫的api介面返回的錯誤**. sqlite3_errmsg() 則用來得到這些錯誤**所對應的文字說明. 這些錯誤資訊將以 utf-8 的編碼返回,並且在下一次呼叫任何sqlite api函式的時候被清除. sqlite3_errmsg16() 和 sqlite3_errmsg() 大體上相同,除了返回的錯誤資訊將以 utf-16 本機位元組順序編碼.
sqlite3的錯誤**相比sqlite2沒有任何的改變,它們分別是:
#define sqlite_ok 0 /* successful result */#define sqlite_error 1 /* sql error or missing database */
#define sqlite_internal 2 /* an internal logic error in sqlite */
#define sqlite_perm 3 /* access permission denied */
#define sqlite_abort 4 /* callback routine requested an abort */
#define sqlite_busy 5 /* the database file is locked */
#define sqlite_locked 6 /* a table in the database is locked */
#define sqlite_nomem 7 /* a malloc() failed */
#define sqlite_readonly 8 /* attempt to write a readonly database */
#define sqlite_interrupt 9 /* operation terminated by sqlite_interrupt() */
#define sqlite_ioerr 10 /* some kind of disk i/o error occurred */
#define sqlite_corrupt 11 /* the database disk image is malformed */
#define sqlite_notfound 12 /* (internal only) table or record not found */
#define sqlite_full 13 /* insertion failed because database is full */
#define sqlite_cantopen 14 /* unable to open the database file */
#define sqlite_protocol 15 /* database lock protocol error */
#define sqlite_empty 16 /* (internal only) database table is empty */
#define sqlite_schema 17 /* the database schema changed */
#define sqlite_toobig 18 /* too much data for one row of a table */
#define sqlite_constraint 19 /* abort due to contraint violation */
#define sqlite_mismatch 20 /* data type mismatch */
#define sqlite_misuse 21 /* library used incorrectly */
#define sqlite_nolfs 22 /* uses os features not supported on host */
#define sqlite_auth 23 /* authorization denied */
#define sqlite_row 100 /* sqlite_step() has another row ready */
#define sqlite_done 101 /* sqlite_step() has finished executing */
後端工具集
判斷索引是否存在 param indexname return public boolean i istsindex string indexname actionget return response.i ists 重新建立索引 補救措施 如果索引誤刪 自動建立新的索引 postconstruct...
鑲嵌資料集工具小結(一)建立 刪除鑲嵌資料集
在 arcgis 中,鑲嵌資料集是用來批量管理 動態鑲嵌大量柵格資料的推薦資料模型,在工具箱中有一系列用於操作鑲嵌資料集的工具。如果希望了解什麼是鑲嵌資料集,可以預先看幫助文件。平時接觸到的問題可能散落在使用鑲嵌資料集的各個環節,最近就以鑲嵌資料集工具為索引,順藤摸瓜。鑲嵌資料集的工具箱位於 dat...
modelsim工具問題集
1 modelsim 在編譯大工程時,有時候為了除錯方便,需要出很多不同的小版本。一般新手用指令碼編譯檔案時喜歡用如下方式 vlog sv work work verilog encode frame hw mb2s.v vlog sv work work verilog encode frame ...