標籤:style blog http color 使用 檔案 資料 io
SQLite是一個輕量級的關係型資料庫,正是由於其精悍小巧,在移動端平台被廣泛應用,但不適合處理大量資料和大量操作。它的底層是由C語言編寫,最初設計是為了應用於嵌入式,佔用資源非常低且簡單易用,而且絕大部分程式語言都可以很好的與之結合。在.net中它的sdk中支援linq實現方式,使用更加方便。
sdk安裝。
安裝好了之後,我們引用dll。
這時候出現這樣的錯誤,這是由於sdk只支援arm和32位的編譯環境。
可以將通過項目屬性將平台目標選為32位。
接下來還需要安裝sqlite-net,可以這行package console的shell命令。
這時候我們的項目中會出現兩個cs檔案。
接下來我們來驗證一下sdk,首先建立一個表對象。
1 using System; 2 using SQLite; 3 4 namespace FY.Weather.DataModel 5 { 6 [Table("Temp")] 7 public class Temp 8 { 9 [PrimaryKey, AutoIncrement]10 public int Id { get; set; }11 12 public string JsonData { get; set; }13 14 public DateTime CreationDate { get; set; }15 }16 }
調用sdk建立表。
1 private async void CreateTemp()2 {3 string dbName = ViewModelLocator.Instance.DBName;4 if (!await Common.CheckFileAsync(dbName))5 {6 SQLite.SQLiteAsyncConnection conn = new SQLite.SQLiteAsyncConnection(dbName);7 await conn.CreateTableAsync<Temp>();8 }9 }
擷取表資料。
1 private async System.Threading.Tasks.Task<Temp> GetTemp(int id) 2 { 3 SQLite.SQLiteAsyncConnection conn = new SQLite.SQLiteAsyncConnection(ViewModelLocator.Instance.DBName); 4 var query = await conn.QueryAsync<Temp>("select * from temp where id=?", new object[] { id }); 5 if (query != null && query.Count > 0) 6 { 7 return query[0]; 8 } 9 return null;10 }
添加修改資料。
1 private async void AddOrEditTemp(Temp temp) 2 { 3 SQLite.SQLiteAsyncConnection conn = new SQLite.SQLiteAsyncConnection(ViewModelLocator.Instance.DBName); 4 var query = await conn.QueryAsync<Temp>("select * from temp where id=?", new object[] { temp.Id }); 5 if (query != null && query.Count > 0) 6 { 7 await conn.UpdateAsync(temp); 8 } 9 else10 {11 await conn.InsertAsync(temp);12 }13 }
驗證資料庫檔案是否存在。
1 public static async System.Threading.Tasks.Task<bool> CheckFileAsync(string fileName) 2 { 3 bool fileIsExist = true; 4 try 5 { 6 Windows.Storage.StorageFile sf = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(fileName); 7 } 8 catch 9 {10 fileIsExist = false;11 }12 return fileIsExist;13 }