SQLite 介紹
一. SQLite 是實現(xiàn)了SQL 92標準的一個大子集的嵌入式數(shù)據(jù)庫.其以在一個庫中組合了數(shù)據(jù)庫引擎和接口,能將所有數(shù)據(jù)存儲于單個文件中而著名.我覺得SQLite的功能一定程度上居于MySQL 和PostgreSQL之間.盡管如此,在性能上面,SQLite常?2-3倍 (甚至更多).這利益于其高度調(diào)整了的內(nèi)部架構(gòu),因為它除去了服務(wù)器端到客戶端和客戶端到服務(wù)器端的通信。
二. 而令人印象深刻的特點是你可將你的整個數(shù)據(jù)庫系統(tǒng)放在其中.利用非常高效的內(nèi)存組織,SQLite只需在很小的內(nèi)存中維護其很小的尺寸,遠遠比其它任何數(shù)據(jù)庫系統(tǒng)都小.這些特點使得其成為在需要高效地應(yīng)用數(shù)據(jù)庫的任務(wù)中一個非常方便的工具.
SQLite 優(yōu)勢
一 . 除了速度和效率,SQLite還有其它好多的優(yōu)勢使得其能成為許多任務(wù)中一個理想的解決方案.因為SQLite的數(shù)據(jù)庫都是簡單文件,因此無須一個管理隊伍花時間來構(gòu)造復(fù)雜的權(quán)限結(jié)構(gòu)來保護用戶的數(shù)據(jù)庫.因為權(quán)限通過文件系統(tǒng)自動進行.這也同時意味著(數(shù)據(jù)庫空間的大小只與環(huán)境有關(guān),與本身無關(guān))無段特殊的規(guī)則來了解用戶磁盤空間.用戶可以從創(chuàng)建他們想要的任意多的數(shù)據(jù)庫和對其對這些數(shù)據(jù)庫的絕對控制權(quán)而得到好處.
二 . 數(shù)據(jù)庫就是一個文件的事實使用SQLite可以輕易地在服務(wù)器間移動.SQLite也除去了需要大量內(nèi)存和其它系統(tǒng)資源的伺候進程.即使當數(shù)據(jù)庫在大量地使用時也是如此.
創(chuàng)建內(nèi)存數(shù)據(jù)庫
1.由于業(yè)務(wù)的需要,我使用SQLite 內(nèi)存數(shù)據(jù)庫制作一個緩存,IIS 停止內(nèi)存數(shù)據(jù)庫的數(shù)據(jù)全部丟失,不知道SQLite 是否可以做分布式的內(nèi)存數(shù)據(jù)管理。
2.添加System.Data.SqlClient引用,程序集請到這里http://sqlite.phxsoftware.com/ 下載
3.創(chuàng)建內(nèi)存數(shù)據(jù)庫 , Data Source=:memory:;Version=3; 這個連接字符串折騰了很久, 當然這里也可以使用文件來存儲數(shù)據(jù),只需要修改 Data Source=:memory: 為 Data Source= Cache.db 就ok !當然這個表需要在Global 里面創(chuàng)建
代碼
SQLiteConnection conn = (SQLiteConnection)new SQLiteConnection("Data Source=:memory:;Version=3; Cache Size = 3000;New=True;Pooling=False;Max Pool Size=100;LongNames = 0; Timeout = 1000; NoTXN = 0; SyncPragma = NORMAL; StepAPI = 0");
conn.Open();
IDbCommand dbcmd = conn.CreateCommand();
//創(chuàng)建內(nèi)存表
string sql = "CREATE TABLE [AvTable] ( [ID] INTEGER PRIMARY KEY NOT NULL,[CityPair] VARCHAR(6) NULL,[FlightNo] VARCHAR(50) NULL,[FlightDate] VARCHAR(10) NULL,[CacheTime] VARCHAR(2000) NULL,[AVNote] VARCHAR(2000) NULL)";
dbcmd.CommandText = sql;
dbcmd.Connection = conn;
dbcmd.ExecuteNonQuery();
SQLiteConn = conn;
全局屬性,打開數(shù)據(jù)庫連接后創(chuàng)建好表后賦值給這個屬性,以后操作數(shù)據(jù)一致使用這個連接。
public static SQLiteConnection SQLiteConn { get; set; }
使用SQL 語句操作表如下, sql 是代表sql 語句
string sql = "Update AVTable Set CityPair='" + av.CityPair + "',CacheTime='" + DateTime.Now.ToString() + "',AVNote='" + av.AVNote + "' Where FlightNo='" + av.FlightNo + "' And FlightDate='" + av.FlightDate + "'";
IDbCommand dbcmd = MemoryDatabse.SQLiteConn.CreateCommand();
dbcmd.CommandText = sql;
dbcmd.Connection = MemoryDatabse.SQLiteConn;
int count = dbcmd.ExecuteNonQuery();
SQLite 的查詢語法 和 SQL SERVER 有一些區(qū)別 。
提取 avcache表 11-20 的數(shù)據(jù) 。
Select * From avcache Limit 9 Offset 10; 以上語句表示從avcache 表獲取數(shù)據(jù),跳過10行,取9行 。
另外一種寫法, 從10 開始提取 提取9條數(shù)據(jù) 。
select * from avcache limit10,9
語法
sql = "select * from avcache where "+條件+" order by "+排序+" limit "+要顯示多少條記錄+" offset "+跳過多少條記錄;
例子
select * from avcache limit 15 offset 20 意思是說: 從avcache 表跳過20條記錄選出15條記錄
由于最近工作需要開始學習SQLite ,寫的難免有些粗糙的地方,希望大家指正,提供更好的方法!