sqlite使用總結1

來源:互聯網
上載者:User

前序:... 1
一、 版本... 1
二、 基本編譯... 2
三、 SQLITE操作入門... 2
(1) 基本流程... 2
(2) SQL語句操作... 4
(3) 操作二進位... 8
(4) 交易處理... 10
四、 給資料庫加密... 10
五、 後記... 25

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

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

下面My Code仍然用 VC 編寫,因為我覺得VC是一個很不錯的IDE,可以加快代碼編寫速度(例如配合 Vassist )。下面我所說的編譯環境,是VC2003。如果讀者覺得自己習慣於 unix 下用 vi 編寫代碼速度較快,可以不用管我的說明,只需要符合自己習慣即可,因為我用的是標準 C 或 C++ 。不會給任何人帶來不便。

一、 版本
從 www.sqlite.org 網站可下載到最新的 sqlite 代碼和編譯版本。我寫此文章時,最新代碼是 3.3.17 版本。

很久沒有去下載 sqlite 新代碼,因此也不知道 sqlite 變化這麼大。以前很多檔案,現在全部合并成一個 sqlite3.c 檔案。如果單獨用此檔案,是挺好的,省去拷貝一堆檔案還擔心有沒有遺漏。但是也帶來一個問題:此檔案太大,快接近7萬行代碼,VC開它整個機器都慢下來了。如果不需要改它代碼,也就不需要開啟 sqlite3.c 檔案,機器不會慢。但是,下面我要寫通過修改 sqlite 程式碼完成加密功能,那時候就比較痛苦了。如果個人水平較高,建議用些簡單的編輯器來編輯,例如 UltraEdit 或 Notepad 。速度會快很多。

二、 基本編譯
這個不想多說了,在 VC 裡建立 dos 控制台空白工程,把 sqlite3.c 和 sqlite3.h 添加到工程,再建立一個 main.cpp 檔案。在裡面寫:

extern "C"
{
#include "./sqlite3.h"
};
int main( int , char** )
{
return 0;
}

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

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

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

三、 SQLITE操作入門
sqlite提供的是一些C函數介面,你可以用這些函數操作資料庫。通過使用這些介面,傳遞一些標準 sql 語句(以 char * 類型)給 sqlite 函數,sqlite 就會為你操作資料庫。

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

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

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

(1) 基本流程
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"
{
#include "./sqlite3.h"
};
int main( int , char** )
{
sqlite3 * db = NULL; //聲明sqlite關鍵結構指標
int result;
//開啟資料庫
//需要傳入 db 這個指標的指標,因為 sqlite3_open 函數要為這個指標分配記憶體,還要讓db指標指向這個記憶體區
result = sqlite3_open( “c://Dcg_database.db”, &db );
if( result != SQLITE_OK )
{
//資料庫開啟失敗
return -1;
}
//資料庫作業碼
//…
//資料庫開啟成功
//關閉資料庫
sqlite3_close( db );
return 0;
}

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

聯繫我們

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