SQLite 介紹
一. SQLite 是實現了SQL 92標準的一個大子集的嵌入式資料庫.其以在一個庫中組合了資料庫引擎和介面,能將所有資料存放區於單個檔案中而著名.我覺得SQLite的功能一定程度上居於MySQL 和PostgreSQL之間.儘管如此,在效能上面,SQLite常常快2-3倍 (甚至更多).這利益於其高度調整了的內部架構,因為它除去了伺服器端到用戶端和用戶端到伺服器端的通訊。
二. 而令人印象深刻的特點是你可將你的整個資料庫系統放在其中.利用非常高效的記憶體組織,SQLite只需在很小的記憶體中維護其很小的尺寸,遠遠比其它任何資料庫系統都小.這些特點使得其成為在需要高效地應用程式資料庫的任務中一個非常方便的工具.
SQLite 優勢
一 . 除了速度和效率,SQLite還有其它好多的優勢使得其能成為許多任務中一個理想的解決方案.因為SQLite的資料庫都是簡單檔案,因此無須一個管理隊伍花時間來構造複雜的許可權結構來保護使用者的資料庫.因為許可權通過檔案系統自動進行.這也同時意味著(資料庫空間的大小隻與環境有關,與本身無關)無段特殊的規則來瞭解使用者磁碟空間.使用者可以從建立他們想要的任意多的資料庫和對其對這些資料庫的絕對控制權而得到好處.
二 . 資料庫就是一個檔案的事實使用SQLite可以輕易地在伺服器間移動.SQLite也除去了需要大量記憶體和其它系統資源的伺候進程.即使當資料庫在大量地使用時也是如此.
建立記憶體資料庫
1.由於業務的需要,我使用SQLite 記憶體資料庫製作一個緩衝,IIS 停止記憶體資料庫的資料全部丟失,不知道SQLite 是否可以做分布式的記憶體資料管理。
2.添加System.Data.SqlClient引用,程式集請到這裡http://sqlite.phxsoftware.com/ 下載
3.建立記憶體資料庫 , Data Source=:memory:;Version=3; 這個連接字串折騰了很久, 當然這裡也可以使用檔案來儲存資料,只需要修改 Data Source=:memory: 為 Data Source= Cache.db 就ok !當然這個表需要在Global 裡面建立
代碼
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();//建立記憶體表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;
全域屬性,開啟資料庫連接後建立好表後賦值給這個屬性,以後操作資料一致使用這個串連。
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 有一些區別 。
提取 avcache表 11-20 的資料 。
Select * From avcache Limit 9 Offset 10;
以上語句表示從avcache 表擷取資料,跳過10行,取9行 。
另外一種寫法, 從10 開始提取 提取9條資料 。
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 ,寫的難免有些粗糙的地方,希望大家指正,提供更好的方法!