在 iOS 應用程式中使用數據
DataAccess_Adv範例顯示可讓使用者輸入和 CRUD (建立、讀取、更新和刪除) 資料庫功能的工作應用程式。 應用程式包含兩個畫面:清單和數據輸入表單。 在 iOS 和 Android 中,所有資料存取代碼都可以重複使用,而不需要修改。
在新增一些數據之後,應用程式畫面在iOS上看起來會像這樣:
iOS 專案如下所示 – 本節中顯示的程式代碼包含在 Orm 目錄中:
iOS 中 ViewControllers 的原生 UI 程式代碼範圍不足。 如需UI控件的詳細資訊,請參閱iOS使用數據表和儲存格指南。
參閱
範例中有數個讀取作業:
- 讀取清單
- 讀取個別記錄
類別中的 StockDatabase
兩個方法是:
public IEnumerable<Stock> GetStocks ()
{
lock (locker) {
return (from i in Table<Stock> () select i).ToList ();
}
}
public Stock GetStock (int id)
{
lock (locker) {
return Table<Stock>().FirstOrDefault(x => x.Id == id);
}
}
iOS 會將資料以不同的方式呈現為 UITableView
。
建立和更新
為了簡化應用程式程式代碼,會根據 PrimaryKey 是否已設定,提供執行 Insert 或 Update 的單一儲存方法。 因為屬性 Id
是以屬性標示 [PrimaryKey]
,所以您不應該在程式代碼中設定它。
這個方法會偵測是否已儲存值(藉由檢查主鍵屬性)並據以插入或更新物件:
public int SaveStock (Stock item)
{
lock (locker) {
if (item.Id != 0) {
Update (item);
return item.Id;
} else {
return Insert (item);
}
}
}
真實世界應用程式通常需要一些驗證(例如必要的欄位、最小長度或其他商務規則)。 良好的跨平臺應用程式在共用程式碼中盡可能實作驗證邏輯,根據平臺的功能,將驗證錯誤傳回UI以顯示。
刪除
Insert
與和 Update
方法不同,Delete<T>
方法只能接受主鍵值,而不是完整Stock
物件。
在此範例中, Stock
對象會傳遞至 方法,但只會將Id屬性傳遞至 Delete<T>
方法。
public int DeleteStock(Stock stock)
{
lock (locker) {
return Delete<Stock> (stock.Id);
}
}
使用預先填入的 SQLite 資料庫檔案
某些應用程式隨附的資料庫已填入數據。 您可以輕鬆地在行動應用程式中完成此作業,方法是將現有的SQLite 資料庫檔案與您的應用程式一起傳送,並將它複製到可寫入的目錄,再加以存取。 由於 SQLite 是許多平臺上所使用的標準檔案格式,因此有許多工具可用來建立 SQLite 資料庫檔案:
- SQLite Manager Firefox 擴充功能 – 適用於 Mac 和 Windows,併產生與 iOS 和 Android 相容的檔案。
- 命令列 – 請參閱 www.sqlite.org/sqlite.html 。
建立資料庫檔案以與您的應用程式一起散發時,請小心命名數據表和數據行,以確保它們符合您的程式代碼預期,特別是如果您使用 SQLite.NET 預期名稱符合 C# 類別和屬性(或相關聯的自定義屬性)。
若為 iOS,請在應用程式中包含 sqlite 檔案,並確定它已標示為 建置動作:內容。 將程式代碼放在 中 FinishedLaunching
,將檔案複製到可寫入的目錄 ,再 呼叫任何數據方法。 下列程式代碼只會複製名為 data.sqlite 的現有資料庫,但前提是它尚未存在。
// Copy the database across (if it doesn't exist)
var appdir = NSBundle.MainBundle.ResourcePath;
var seedFile = Path.Combine (appdir, "data.sqlite");
if (!File.Exists (Database.DatabaseFilePath))
{
File.Copy (seedFile, Database.DatabaseFilePath);
}
在完成之後執行的任何數據存取碼(無論是 ADO.NET 或使用 SQLite.NET),都將能夠存取預先填入的數據。