文章目錄
- 3.1 檔案資料庫、記憶體資料庫的建立
- 3.3 檔案資料庫命令格式的匯入匯出
一、初識sqlite
偶然的機會接觸到sqlite,不禁驚歎sqlite的體型小巧而功能強大(看來軟體也不可貌相哦),Sqlite 是開源的記憶體資料庫(也可以稱之為內嵌式資料庫),大量無私的程式員為sqlite發展貢獻了自己的力量。Sqlite 應用極廣,手機、mp3,機頂盒可能存在sqlite身影,Apple的Mac os,linux,或者windows在安裝第三方軟體時也可以應用sqlite。
Sqlite技術優點:
1. Sqlite輕量級、跨平台的關係型開源記憶體資料庫,使用sqlite只需帶上動態庫,就可使用sqlite全部功能(動態庫Windows下487KB,Linux下347KB);
2. 核心引擎不依賴第三方軟體,也不需要安裝;
3. 資料庫中所有的資訊(比如表、視圖、觸發器、等)都包含在一個檔案內。這個檔案可以copy到其它目錄或其它機器上,也照用不誤。如果使用記憶體方式,可以沒有該檔案;
4. 除了主流作業系統,SQLite還支援了很多冷門的作業系統。它對很多嵌入式系統(比如Android、Windows Mobile、Symbin、Palm、VxWorks等)也支援;
5. SQLite的API不區分當前操作的資料庫是在記憶體還是在檔案(對於儲存介質是透明的);
等等;
缺點:
1. 並發訪問的鎖機制
SQLite在並發(包括多進程和多線程)讀寫方面的效能不太理想。資料庫可能會被寫操作獨佔,從而導致其它讀寫操作阻塞或出錯;
2. SQL標準支援不全
如不支援外鍵約束;
看來還是優點多於缺點!呵呵!
二、sqlite體系機構
sqlite模組將 查詢過程分為幾個不連續的任務,在結構棧的頂部編譯查詢語句,中不執行,在底部處理作業系統的儲存和介面。
圖1-2SQLite的體繫結構
(註:結構圖轉載於《SQLite權威指南》)
三、sqlite檔案資料庫、記憶體資料庫建立及匯入匯出
sqlite官網(www.sqlite.org)同時提供已編譯版本和來源程式。同時適用於Windows和linux。
經過前面sqlite熱身之後,趕緊轉入正題,幹點正事!(*^__^*)
3.1 檔案資料庫、記憶體資料庫的建立3.1.1檔案資料庫的建立
Windows:
1) 下載sqlite最新版本sqlite3.exe;
2) dos進入到執行程式目錄下;
3) 輸入 sqlite3 d:\test.db(如果後面執行路徑存在test.db 則開啟資料庫;如果執行路徑下不存在test.db則建立test.db);
Linux:
1) 下載sqlite最新版本sqlite3;
2) Shell進入到可知性程式目錄下;
3) 輸入sqlite3 /home/test.db(如果後面執行路徑存在test.db 則開啟資料庫;如果執行路徑下不存在test.db則建立test.db);
至此則開啟或者建立一個檔案資料庫庫;
3.1.2 記憶體資料庫的建立
C程式碼範例:sqlite3 *db;rc = sqlite3_open(":memory:",&db); // 記憶體中建立一個資料庫3.2 檔案資料庫、記憶體資料庫的匯入匯出C程式碼範例://////////////////////////////////////////////////////////////////////////////////////////////參數說明://pInMemory: 指向記憶體資料庫指標//zFilename: 指向檔案資料庫目錄的字串指標//isSave 0: 從檔案資料庫載入到記憶體資料庫 1:從記憶體Database Backup到檔案資料庫////////////////////////////////////////////////////////////////////////////////////////////int loadOrSaveDb(sqlite3 *pInMemeory, const char *zFilename, int isSave){ int rc; sqlite3 *pFile; sqlite3_backup *pBackup; sqlite3 *pTo; sqlite3 *pFrom; rc = sqlite3_open(zFilename, &pFile); if(rc == SQLITE_OK) { pFrom = (isSave?pInMemeory:pFile); pTo = (isSave?pFile:pInMemeory); pBackup = sqlite3_backup_init(pTo,"main",pFrom,"main"); if(pBackup) { (void)sqlite3_backup_step(pBackup,-1); (void)sqlite3_backup_finish(pBackup); } rc = sqlite3_errcode(pTo); } (void)sqlite3_close(pFile); return rc;}
調用執行個體:
int ret = 0;char *filename = “d:\\test.db”;sqlite3 *memoryDb;ret = sqlite3_open(“memory:”, &memoryDb);ret = loadOrSaveDb(memoryDb, filename, 0) //檔案資料庫匯入到記憶體資料庫
3.3 檔案資料庫命令格式的匯入匯出
3.3.1 檔案資料庫命令格式資料匯出、備份
方法一:(sqlite資料庫內部)
Sqlite>.output d:\test.sql
Sqlite>.dump
Sqlite>.output stdout
方法二:(dos命令列)
sqlite3 525.db .dump>haha.sql
3.3.2檔案資料庫命令格式資料匯入
sqlite>.read file.sql
今天暫且到這了,to be continue……