SQLite檔案資料庫、記憶體資料庫建立及匯入匯出

來源:互聯網
上載者:User

標籤:

一、初識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 記憶體資料庫的建立
[cpp]  view plain copy print ?
  1. C程式碼範例:  
  2.   
  3. sqlite3 *db;  
  4.   
  5. rc = sqlite3_open(":memory:",&db);    // 記憶體中建立一個資料庫  
  6.   
  7. 3.2 檔案資料庫、記憶體資料庫的匯入匯出  
  8.   
  9. C程式碼範例:  
  10.   
  11. ////////////////////////////////////////////////////////////////////////////////////////////  
  12.   
  13. //參數說明:  
  14.   
  15. //pInMemory: 指向記憶體資料庫指標  
  16.   
  17. //zFilename: 指向檔案資料庫目錄的字串指標  
  18.   
  19. //isSave  0: 從檔案資料庫載入到記憶體資料庫 1:從記憶體Database Backup到檔案資料庫  
  20.   
  21. ////////////////////////////////////////////////////////////////////////////////////////////  
  22.   
  23. int loadOrSaveDb(sqlite3 *pInMemeory, const char *zFilename, int isSave)  
  24.   
  25. {  
  26.   
  27.          int rc;  
  28.   
  29.          sqlite3 *pFile;  
  30.   
  31.          sqlite3_backup *pBackup;  
  32.   
  33.          sqlite3 *pTo;  
  34.   
  35.          sqlite3 *pFrom;  
  36.   
  37.          rc = sqlite3_open(zFilename, &pFile);  
  38.   
  39.          if(rc == SQLITE_OK)  
  40.   
  41.          {  
  42.   
  43.                    pFrom = (isSave?pInMemeory:pFile);  
  44.                    pTo = (isSave?pFile:pInMemeory);  
  45.   
  46.                    pBackup = sqlite3_backup_init(pTo,"main",pFrom,"main");  
  47.   
  48.                    if(pBackup)  
  49.                    {  
  50.                             (void)sqlite3_backup_step(pBackup,-1);  
  51.                             (void)sqlite3_backup_finish(pBackup);  
  52.                    }  
  53.   
  54.                    rc = sqlite3_errcode(pTo);  
  55.   
  56.          }  
  57.   
  58.          (void)sqlite3_close(pFile);  
  59.   
  60.          return rc;  
  61. }  


 調用執行個體:

[cpp]  view plain copy print ?
  1. int ret = 0;  
  2.   
  3. char *filename = “d:\\test.db”;  
  4. sqlite3 *memoryDb;  
  5.   
  6. ret = sqlite3_open(“memory:”, &memoryDb);  
  7. 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

SQLite檔案資料庫、記憶體資料庫建立及匯入匯出

聯繫我們

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