資源描述:
《sqlite使用總結(jié)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、前序:Sqlite3的確很好用。小巧、速度快。但是因?yàn)榉俏④浀漠a(chǎn)品,幫助文檔總覺(jué)得不夠。這些天再次研究它,又有一些收獲,這里把我對(duì)sqlite3的研究列出來(lái),以備忘記。一、??????版本從www.sqlite.org網(wǎng)站可下載到最新的sqlite代碼和編譯版本。很久沒(méi)有去下載sqlite新代碼,因此也不知道sqlite變化這么大。以前很多文件,現(xiàn)在全部合并成一個(gè)sqlite3.c文件。如果單獨(dú)用此文件,是挺好的,省去拷貝一堆文件還擔(dān)心有沒(méi)有遺漏。但是也帶來(lái)一個(gè)問(wèn)題:此文件太大,快接近7萬(wàn)行代碼,VC開(kāi)它整個(gè)機(jī)器都慢下來(lái)了。如果不需要改它
2、代碼,也就不需要打開(kāi)sqlite3.c文件,機(jī)器不會(huì)慢。但是,下面我要寫(xiě)通過(guò)修改sqlite代碼完成加密功能,那時(shí)候就比較痛苦了。如果個(gè)人水平較高,建議用些簡(jiǎn)單的編輯器來(lái)編輯,例如UltraEdit或Notepad。速度會(huì)快很多。二、??????基本編譯這個(gè)不想多說(shuō)了,在VC里新建dos控制臺(tái)空白工程,把sqlite3.c和sqlite3.h添加到工程,再新建一個(gè)main.cpp文件。在里面寫(xiě):extern"C"{#include"./sqlite3.h"};intmain(int,char**){return0;}為什么要extern“
3、C”?如果問(wèn)這個(gè)問(wèn)題,我不想說(shuō)太多,這是C++的基礎(chǔ)。要在C++里使用一段C的代碼,必須要用extern“C”括起來(lái)。C++跟C雖然語(yǔ)法上有重疊,但是它們是兩個(gè)不同的東西,內(nèi)存里的布局是完全不同的,在C++編譯器里不用extern“C”括起C代碼,會(huì)導(dǎo)致編譯器不知道該如何為C代碼描述內(nèi)存布局??赡茉趕qlite3.c里人家已經(jīng)把整段代碼都extern“C”括起來(lái)了,但是你遇到一個(gè).c文件就自覺(jué)的再括一次,也沒(méi)什么不好?;竟こ叹瓦@樣建立起來(lái)了。編譯,可以通過(guò)。但是有一堆的warning??梢圆还芩H?、??????SQLITE操作入門(mén)sq
4、lite提供的是一些C函數(shù)接口,你可以用這些函數(shù)操作數(shù)據(jù)庫(kù)。通過(guò)使用這些接口,傳遞一些標(biāo)準(zhǔn)sql語(yǔ)句(以char*類型)給sqlite函數(shù),sqlite就會(huì)為你操作數(shù)據(jù)庫(kù)。sqlite跟MS的access一樣是文件型數(shù)據(jù)庫(kù),就是說(shuō),一個(gè)數(shù)據(jù)庫(kù)就是一個(gè)文件,此數(shù)據(jù)庫(kù)里可以建立很多的表,可以建立索引、觸發(fā)器等等,但是,它實(shí)際上得到的就是一個(gè)文件。備份這個(gè)文件就備份了整個(gè)數(shù)據(jù)庫(kù)。sqlite不需要任何數(shù)據(jù)庫(kù)引擎,這意味著如果你需要sqlite來(lái)保存一些用戶數(shù)據(jù),甚至都不需要安裝數(shù)據(jù)庫(kù)(如果你做個(gè)小軟件還要求人家必須裝了sqlserver才能運(yùn)行
5、,那也太黑心了)。下面開(kāi)始介紹數(shù)據(jù)庫(kù)基本操作。(1)??基本流程i.1???????????關(guān)鍵數(shù)據(jù)結(jié)構(gòu)sqlite里最常用到的是sqlite3*類型。從數(shù)據(jù)庫(kù)打開(kāi)開(kāi)始,sqlite就要為這個(gè)類型準(zhǔn)備好內(nèi)存,直到數(shù)據(jù)庫(kù)關(guān)閉,整個(gè)過(guò)程都需要用到這個(gè)類型。當(dāng)數(shù)據(jù)庫(kù)打開(kāi)時(shí)開(kāi)始,這個(gè)類型的變量就代表了你要操作的數(shù)據(jù)庫(kù)。下面再詳細(xì)介紹。i.2???????????打開(kāi)數(shù)據(jù)庫(kù)intsqlite3_open(文件名,sqlite3**);用這個(gè)函數(shù)開(kāi)始數(shù)據(jù)庫(kù)操作。需要傳入兩個(gè)參數(shù),一是數(shù)據(jù)庫(kù)文件名,比如:c:\DongChunGuang_Databa
6、se.db。文件名不需要一定存在,如果此文件不存在,sqlite會(huì)自動(dòng)建立它。如果它存在,就嘗試把它當(dāng)數(shù)據(jù)庫(kù)文件來(lái)打開(kāi)。sqlite3**參數(shù)即前面提到的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。這個(gè)結(jié)構(gòu)底層細(xì)節(jié)如何,你不要關(guān)它。函數(shù)返回值表示操作是否正確,如果是SQLITE_OK則表示操作正常。相關(guān)的返回值sqlite定義了一些宏。具體這些宏的含義可以參考sqlite3.h文件。里面有詳細(xì)定義(順便說(shuō)一下,sqlite3的代碼注釋率自稱是非常高的,實(shí)際上也的確很高。只要你會(huì)看英文,sqlite可以讓你學(xué)到不少東西)。下面介紹關(guān)閉數(shù)據(jù)庫(kù)后,再給一段參考代碼。i.3?
7、??????????關(guān)閉數(shù)據(jù)庫(kù)intsqlite3_close(sqlite3*);前面如果用sqlite3_open開(kāi)啟了一個(gè)數(shù)據(jù)庫(kù),結(jié)尾時(shí)不要忘了用這個(gè)函數(shù)關(guān)閉數(shù)據(jù)庫(kù)。下面給段簡(jiǎn)單的代碼:extern"C"{#include"./sqlite3.h"};intmain(int,char**){sqlite3*db=NULL;//聲明sqlite關(guān)鍵結(jié)構(gòu)指針intresult;//打開(kāi)數(shù)據(jù)庫(kù)//需要傳入db這個(gè)指針的指針,因?yàn)閟qlite3_open函數(shù)要為這個(gè)指針?lè)峙鋬?nèi)存,還要讓db指針指向這個(gè)內(nèi)存區(qū)result=sqlite3_op
8、en(“c:\Dcg_database.db”,&db);if(result!=SQLITE_OK){//數(shù)據(jù)庫(kù)打開(kāi)失敗return-1;}//數(shù)據(jù)庫(kù)操作代碼//…//數(shù)據(jù)庫(kù)打開(kāi)成功//關(guān)閉