董淳光 SQLITE3 使用總結(1)

2021-06-18 01:46:36 字數 2144 閱讀 3216

sqlite3 的確很好用。小巧、速度快。但是因為非微軟的產品,幫助文件總覺得不夠。這些天再次研究它,又有一些收穫,這裡把我對 sqlite3 的研究列出來,以備忘記。

這裡要註明,我是乙個跨平台專注者,並不喜歡只用 windows 平台。我以前的工作就是為 unix 平台寫**。下面我所寫的東西,雖然沒有驗證,但是我已盡量不使用任何 windows 的東西,只使用標準 c 或標準c++。但是,我沒有嘗試過在別的系統、別的編譯器下編譯,因此下面的敘述如果不正確,則留待以後修改。

下面我的**仍然用 vc 編寫,因為我覺得vc是乙個很不錯的ide,可以加快**編寫速度(例如配合 vassist )。下面我所說的編譯環境,是vc2003。如果讀者覺得自己習慣於 unix 下用 vi 編寫**速度較快,可以不用管我的說明,只需要符合自己習慣即可,因為我用的是標準 c 或 c++ 。不會給任何人帶來不便。

從 www.sqlite.org

這個不想多說了,在 vc 裡新建 dos 控制台空白工程,把 sqlite3.c 和 sqlite3.h 新增到工程,再新建乙個 main.cpp 檔案。在裡面寫:

extern "c"

;int main( int , char** )

為什麼要 extern 「c」 ?如果問這個問題,我不想說太多,這是c++的基礎。要在 c++ 裡使用一段 c 的**,必須要用 extern 「c」 括起來。c++跟 c雖然語法上有重疊,但是它們是兩個不同的東西,記憶體裡的布局是完全不同的,在c++編譯器裡不用extern 「c」括起c**,會導致編譯器不知道該如何為 c **描述記憶體布局。

可能在 sqlite3.c 裡人家已經把整段**都 extern 「c」 括起來了,但是你遇到乙個 .c 檔案就自覺的再括一次,也沒什麼不好。

基本工程就這樣建立起來了。編譯,可以通過。但是有一堆的 warning。可以不管它。

sqlite提供的是一些c函式介面,你可以用這些函式運算元據庫。通過使用這些介面,傳遞一些標準 sql 語句(以 char * 型別)給 sqlite 函式,sqlite 就會為你運算元據庫。

sqlite 跟ms的access一樣是檔案型資料庫,就是說,乙個資料庫就是乙個檔案,此資料庫裡可以建立很多的表,可以建立索引、觸發器等等,但是,它實際上得到的就是乙個檔案。備份這個檔案就備份了整個資料庫。

sqlite 不需要任何資料庫引擎,這意味著如果你需要 sqlite 來儲存一些使用者資料,甚至都不需要安裝資料庫(如果你做個小軟體還要求人家必須裝了sqlserver 才能執行,那也太黑心了)。

下面開始介紹資料庫基本操作。

i.1關鍵資料結構

sqlite 裡最常用到的是 sqlite3 * 型別。從資料庫開啟開始,sqlite就要為這個型別準備好記憶體,直到資料庫關閉,整個過程都需要用到這個型別。當資料庫開啟時開始,這個型別的變數就代表了你要操作的資料庫。下面再詳細介紹。

i.2開啟資料庫

int sqlite3_open( 檔名, sqlite3 ** );

用這個函式開始資料庫操作。

需要傳入兩個引數,一是資料庫檔名,比如:c:\\dongchunguang_database.db。

檔名不需要一定存在,如果此檔案不存在,sqlite 會自動建立它。如果它存在,就嘗試把它當資料庫檔案來開啟。

sqlite3 ** 引數即前面提到的關鍵資料結構。這個結構底層細節如何,你不要關它。

函式返回值表示操作是否正確,如果是

sqlite_ok

則表示操作正常。相關的返回值sqlite定義了一些巨集。具體這些巨集的含義可以參考 sqlite3.h 檔案。裡面有詳細定義(順便說一下,sqlite3 的**注釋率自稱是非常高的,實際上也的確很高。只要你會看英文,sqlite 可以讓你學到不少東西)。

下面介紹關閉資料庫後,再給一段參考**。

i.3關閉資料庫

int sqlite3_close(sqlite3 *);

前面如果用 sqlite3_open 開啟了乙個資料庫,結尾時不要忘了用這個函式關閉資料庫。

下面給段簡單的**:

extern "c"

;int main( int , char** )

//資料庫操作** //

… //資料庫開啟成功 //

關閉資料庫

sqlite3_close( db );

return 0;

}這就是一次資料庫操作過程。

董淳光之SQLITE3 使用總結 5

int sqlite3 key sqlite3 db,const void pkey,int nkey int sqlite3 rekey sqlite3 db,const void pkey,int nkey 被sqlite 和 sqlite3 key interop 呼叫,附加金鑰到資料庫.in...

SQLITE3 使用總結 4

下面是編譯時提示缺少的函式 這個函式不需要做任何處理,獲取金鑰的部分在下面derivekey 函式裡實現 void sqlite3codecgetkey sqlite3 db,int ndb,void key,int nkey 被sqlite 和sqlite3 key interop 呼叫,附加金鑰...

SQLITE3 使用總結(十)

五 效能優化 很多人直接就使用了,並未注意到sqlite也有配置引數,可以對效能進行調整。有時候,產生的結果會有很大影響。主要通過pragma指令來實現。比如 空間釋放 磁碟同步 cache大小等。不要開啟。前文提高了,vacuum的效率非常低!1 auto vacuum pragma auto v...