標籤:
SQLite是一款很有名氣的小型開源跨平台資料庫,作為目前最流行的開源嵌入式關係型資料庫,在系統結構設計中正在扮演著越來越重要的角色。
本文主要沿著 http://www.cppblog.com/weiym/archive/2012/10/16/193357.html 這篇文章裡面的學習指導思想,來一步步學習SQLite,為的是快速在實際開發中利用好SQLite。
1. SQLite的優缺點以及適用場合 1. 1 優點
輕量級: 與傳統的C/S模式的資料庫軟體不同,它是進程內的資料庫引擎,不存在用戶端和伺服器。使用SQLite,只需要帶上一個幾百K大小的動態庫就可以:
綠色組件: SQLite的核心引擎本身不依賴第三方軟體,隨插即用。
單一檔案: 資料庫中所有的資訊(比如表、視圖、觸發器等)都儲存在單個檔案內,可以拷貝到其他地方,照用不誤。
跨平台 : 不僅僅支援主流作業系統(Windows/Linux),還支援很多小型嵌入式系統(Android,WP,Vxworks)。
查詢效率極高 : SQLite的API不區分當前資料庫是儲存在記憶體中還是在磁碟檔案中,為了提高效率,可以切換為記憶體方式。只需要在開始時將資料庫載入記憶體,讀寫完成後,再把記憶體資料庫dump會磁碟檔案上就可以,讀寫記憶體比讀寫磁碟快很多倍。
1.2 缺點
並發訪問的鎖機制: SQLite在並發讀寫方面的效能一直不太理想,在有大量insert,update訪問時,不建議使用。
SQL標準支援不全 :
1.3適用場合
適合查詢速度要求較高,記憶體佔用較少的場合,尤其是嵌入式作業系統,如各種手機作業系統,低並發web(99.9%網站是低並發),php環境裡原生支援SQLite,asp.net/.net winform裡可以很方便的使用System.Data.SQLite.
SQLite本身是C寫的,內建的API介面也是C介面,所以用C/C++來使用是最直接的了。對於Java語言來說,可以通過SQLite的JDBC介面方式使用SQLite,對於Python,pysqlite是操作SQLite的首選,它已經是Python的標準庫之一。
SQLite使用的授權協議時Public Domain協議,可以大膽的使用。
2. SQL的核心組件
SQL中有兩個核心對象,分別為database_connection和prepared_statement 的使用。
database_connection對象是通過sqllite3_open()介面函數建立並返回的,在應用程式使用任何其他SQLite介面函數之前,必須先調用該函數用於初始化。
prepared_statement對象可以簡單理解為編譯後的SQL語句,所有和SQL語句執行相關的函數需要該對象作為輸入參數用於完成指定SQL操作。
SQL提供的核心介面函數有
sqlite_open
sqlite_prepare
sqlite_step(評估prepared_statement對象)
sqlite3_column(擷取當前行指定列的資料)
sqlite3_finalize 用於銷毀prepared_statement對象
sqlite_close 用於關閉database_connection對象
3. 在CodeBlock上整合SQLite
首先去SQLite官網上面下載最新版的源碼,http://www.sqlite.org/download.html,我下載的是sqlite-amalgamation-3080704.zip版本。
解壓此壓縮包,得到如下幾個檔案:
往你的項目裡面添加上述檔案(除了shell.c檔案),然後按Ctrl+F9編譯,就可以。
這麼強大的SQLite,真正起作用的,只有三個檔案,不由得佩服開發人員。通過閱讀官網上的編譯入門資料,得知源碼有兩種下載版本,一種是混合式的,上述下載的就是這樣的,它在sqlite3.c中實現了全部的SQLite庫中的內容,sqlite3.h定義了sqlite3.c的介面函數,很容易整合進所需要的工程檔案中。
常用的SQLite的Shell命令:
.tables 查看當前的SQLite資料庫命令
.schema 查看建立SQLite資料庫的命令
參考連結:
http://stackoverflow.com/questions/11574280/how-to-use-sqlite-in-c-program-using-codeblocks
附錄:
SQLite的官方首頁:
http://www.sqlite.org/
SQLite中文站:
http://www.sqlite.com.cn/
System.Data.SQLite:
http://sqlite.phxsoftware.com/
sql學習筆記之 嵌入式資料庫(sqlite,firebird)
http://www.cnblogs.com/ljzforever/archive/2010/03/09/1681453.html
SQLite學習心得