Delphi for iOS開發指南(15):在iOS應用程序中使用SQLite

在開始這篇教程之前,你應該閱讀並執行下面教程:

  • iOS開發指南(9):在iOS應用程序中使用ListBox組件來顯示TableView

這篇教程描述了在iOS Device上,通過dbExpress框架,來使用SQLite作爲一個本地數據存儲的基本步驟。

 

 

 

 

使用DBExpress來連接數據庫

 

dbExpress是一個十分快速的數據庫訪問框架,由Delphi編寫。RAD Studio爲很多主要的數據庫提供驅動,例如InterBase,Oracle,DB2,SQL Server,MySQL,Firebird,SQLite,和ODBC。你可以使用相同的過程來訪問這些不同的數據庫。

 

  • 在iOS平臺,dbExpress支持InterBase ToGo,也支持SQLite。這些數據庫產品可以運行在iOSDevice上。
  • 對於其他數據庫,例如,Oracle,你至少需要一個客戶端的庫。在Windows平臺上,客戶端的庫由一個DLL提供來連接數據庫。因爲,你需要使用中間層技術,例如DataSnap來在iOS Device上連接這些數據庫。

 

 

另一個討論如何在iOS Device上不使用客戶端的庫連接企業級數據庫的教程;請查看“iOS教程:在iOS客戶端應用程序中連接企業級數據庫”。

 

 

 

 

 

 

在Window環境下創建開發使用的數據庫

 

首先,你需要創建一下SQLite數據庫文件在你的Windows開發平臺下。使用如下步驟,以便於你可以使用Mobile Form Designer來設計你的iOS應用的用戶界面。

 

在Data Explorer中創建數據庫

 

1.      到Data Explorer中,右擊SQLite節點,然後選擇Add New Connection:


2.      定義連接的名稱,例如ShoppingList。


3.      指定數據庫文件的路徑:


4.      佔擊Advanced按鈕打開Advanced Properties對話框。

5.      更改FailIfMissing屬性爲Fale,然後關閉對話框:注:設置FailIfMissing爲False表示命令DataExplorer在文件不存在的情況下創建一個新的數據庫文件。


6.      點擊Test Connection按鈕。在這個操作中,如果數據庫文件不存在,那麼會創建一個新的。

 

 

 

在Data Explorer中創建表

 

1.      在Data Explorer上,選擇在SQLite節的ShoppingList節點,然後從下拉菜單中選擇New Table。


2.      指定標題爲ShopItem列的類型爲TEXT。


3.      點擊Save按鈕,然後指定一個表名(例如,Item。)

 

 

 

 

 

 

 

 

 

 

設計並配置用戶界面

 

這篇教程使用一個TListBox組件來作爲UI元素。

 

要配置一個ListBox組件,使用下列步驟:

1.       要創建一個HD FireMonkey Mobile Application,選擇File>New>FireMonkeyMobile Application-Delphi>Blank Application。

2.       拖放一個TToolBar到窗體上。

3.       拖放一個TButton到TToolBar組件上。

4.       在Object Inspector中設置如下屬性:

  • 設置Name屬性爲ButtonAdd。
  • 設置StyleLookup屬性爲addtoolbuttonbordered。

5.       拖放一個TButton到TToolBar組件上。

6.       在Object Inspector中設置如下屬性:

  • 設置Name屬性爲ButtonDelete。
  • 設置StyleLookup屬性爲deletetoolbutton。
  • 設置Text爲Delete。
  • 設置Visible爲False。

7.       拖放一個TLabel到TToolBar組件上。

8.       在Object Inspector中設置如下屬性:

  • 設置Align爲alClient。
  • 設置StyleLookup爲toollabel。
  • 設置Text爲ShoppingList。
  • 設置TextAlign爲taCenter。

9.       拖放一個TListBox組件在窗體上。

10.     在Object Inspector,設置ListBox組件的如下屬性:

  • 設置Align屬性爲alClient,以便ListBox組件填充整個窗體。

 

 

 

 

連接數據

 

下面這些是連接在Data Explorer中已經定義好了的數據庫中的數據的基本步驟:

1.       在Data Explorer上選中Item表,然後拖放到Form Designer上。


注:這會創建兩個組件(ShoppingList:TSQLConenction以及Item:TSQLDataSet)到窗體上。


2.       在窗體上選中ShoppingList組件,然後更改Connected屬性爲True。

3.       在窗體上選中Item組件,然後更改Active屬性爲True。

4.       選擇View>LiveBindings Designer,然後LiveBindingsDesigner打開。

5.       選中Item組件中的ShopItem,然後拖動ShopItem到ListBox1。


下面這些步驟使用在SQLIite數據庫中的數據與用戶界面連接。如果這篇教程中你使用一個已經存在數據的表,現在應該可以在Form Designer中看到真實數據。

 

創建一個事件處理過程,當用戶從列表中選中一個項目時來讓Delete按鈕顯示

 

Delete按鈕的Visible屬性設置爲False。因此,默認,用戶看不到這個按鈕。你可以在用戶在列表中選中一個項目時讓它可見,如下:

  • 選中ListBox1,然後爲OnItemClick事件定義如下事件處理過程。

 

  1. procedure TForm1.ListBox1ItemClick(const Sender:TCustomListBox;  
  2.   
  3.   const Item:TListBoxItem);  
  4.   
  5. begin  
  6.   
  7.   ButtonDelete.Visible:= ListBox1.Selected <> nil;  
  8.   
  9. end;  
procedure TForm1.ListBox1ItemClick(const Sender:TCustomListBox;

  const Item:TListBoxItem);

begin

  ButtonDelete.Visible:= ListBox1.Selected <> nil;

end;


 

 

 

 

 

爲Add按鈕創建一個事件處理過程,來添加列表項

 

下一步是給應用程序添加一個功能,可以添加一個項目到Shopping List中去。

1.      拖放一個TSQLQuery組件到窗體上。

2.      在Object Inspector中設置如下屬性:

  • 設置Name屬性爲SQLQueryInsert。
  • 設置SQLConneciton屬性爲ShoppingList。
  • 設置SQL屬性如下:INSERT INTO ITEM (ShopItem) VALUES (:ShopItem)
  • 在Params屬性上的Expand(…)按鈕。
  • 選中ShopItem參數,然後設置DataType爲ftString:



3.      在Form Designer中,雙擊AddButton組件。添加如下代碼到事件處理過程中:

 

  1. procedure TForm1.ButtonAddClick(Sender: TObject);  
  2.   
  3. var  
  4.   
  5.   TaskName: String;  
  6.   
  7. begin  
  8.   
  9.   try  
  10.   
  11.     if InputQuery('EnterNew Item''Name', TaskName) and (TaskName.Trim <> ''then  
  12.   
  13.     begin  
  14.   
  15.      SQLQueryInsert.ParamByName('ShopItem').AsString := TaskName;  
  16.   
  17.      SQLQueryInsert.ExecSQL();  
  18.   
  19.       Item.Refresh;  
  20.   
  21.      ButtonDelete.Visible := ListBox1.Selected <> nil;  
  22.   
  23.     end;  
  24.   
  25.   except  
  26.   
  27.     on e: Exceptiondo  
  28.   
  29.     begin  
  30.   
  31.      ShowMessage(e.Message);  
  32.   
  33.     end;  
  34.   
  35.   end;  
  36.   
  37. end;  
procedure TForm1.ButtonAddClick(Sender: TObject);

var

  TaskName: String;

begin

  try

    if InputQuery('EnterNew Item', 'Name', TaskName) and (TaskName.Trim <> '') then

    begin

     SQLQueryInsert.ParamByName('ShopItem').AsString := TaskName;

     SQLQueryInsert.ExecSQL();

      Item.Refresh;

     ButtonDelete.Visible := ListBox1.Selected <> nil;

    end;

  except

    on e: Exceptiondo

    begin

     ShowMessage(e.Message);

    end;

  end;

end;


 

 

 

InputQuery函數顯示一個對話框來要求用戶輸入文本。這個函數在用戶選擇OK按鈕時返回True,以便你可以在用戶選擇OK並且文本中包含一些數據時才添加數據到數據庫中。

 

 

 

 

爲Delete按鈕創建一個事件處理過程,來從列表中刪除一項

 

下一步就是給應用程序添加一個功能來從Shopping List中刪除一項:

1.      拖放一個TSQLQuery到窗體上。

2.      在Object Inspector中設置如下屬性:

  • 設置Name屬性爲SQLQueryDelete。
  • 設置SQLConnection屬性爲ShoppingList。
  • 設置SQL屬性如下:delete from Item where ShopItem = :ShopItem
  • 選擇Params屬性的Expand(…)按鈕。
  • 選中ShopItem參數,設置DataType爲ftString。

3.      在Form Designer中,雙擊DeleteButton組件。添加如下代碼到事件處理過程中:

  1. procedure TForm1.ButtonDeleteClick(Sender: TObject);  
  2. var  
  3.   TaskName: String;  
  4. begin  
  5.   TaskName := ListBox1.Selected.Text;  
  6.    
  7.   try  
  8.     SQLQueryDelete.ParamByName('ShopItem').AsString := TaskName;  
  9.     SQLQueryDelete.ExecSQL();  
  10.     Item.Refresh;  
  11.     ButtonDelete.Visible := ListBox1.Selected <> nil;  
  12.   except  
  13.     on e: Exception do  
  14.     begin  
  15.       SHowMessage(e.Message);  
  16.     end;  
  17.   end;  
  18. end;  
  19.   
  20.    
  21.   
  22.    
procedure TForm1.ButtonDeleteClick(Sender: TObject);
var
  TaskName: String;
begin
  TaskName := ListBox1.Selected.Text;
 
  try
    SQLQueryDelete.ParamByName('ShopItem').AsString := TaskName;
    SQLQueryDelete.ExecSQL();
    Item.Refresh;
    ButtonDelete.Visible := ListBox1.Selected <> nil;
  except
    on e: Exception do
    begin
      SHowMessage(e.Message);
    end;
  end;
end;

 

 


 

 

 

 

 

修改你的代碼來連接到在iOS上的本地數據庫文件

 

這個程序的基本功能已經實現了。之前在Data Explorer中,你在Windows上創建了一個數據庫文件。這個數據庫文件現在在你的iOS Device上不能使用了,除非你將它複製到iOS Device上或創建它。

 

你可以按照如下步驟創建一個SQLite數據庫和表:

 

指定在iOSDevice上的SQLite數據庫路徑

 

1.      在Form Designer中,選中ShoppingList組件。

2.      在Object Inspector中,雙擊BeforeConnect事件。

3.      添加如下代碼到事件處理過程中:

 

GetHomePath函數提供給你一個iOS應用的真實根目錄。強烈建議使用常量System.SysUtils.PathDelim,因爲PathDelim使用特定平臺的路徑分隔符(而不是寫死在代碼裏,例如\或/)。

 

 

如果不存在,那麼創建表

 

使用SQLite,當表不存在的時候,你可以創建一個表,通過使用CREATE TABLE IF NOT EXISTS語句。你可以在TSQLConnection組件連接到數據庫之後,TSQLDataSet組件連接到表之前創建一個表。使用如下步驟:

1.      在Form Designer中,選中ShoppingList組件。

2.      在Object Inspector,雙擊AfterConnect事件。

3.      添加如下代碼到事件處理過程中:

 

 

  1. procedure TForm1.ShoppingListAfterConnect(Sender: TObject);  
  2. begin  
  3.   ShoppingList.ExecuteDirect('CREATE TABLE IF NOT EXISTS Item (ShopItem  TEXT NOT NULL)');  
  4. end;  
  5.   
  6.    
procedure TForm1.ShoppingListAfterConnect(Sender: TObject);
begin
  ShoppingList.ExecuteDirect('CREATE TABLE IF NOT EXISTS Item (ShopItem  TEXT NOT NULL)');
end;

 


 

 

 

在iOS Simulator或iOSDevice上運行你的應用程序

 

現在,你的應用程序可以準備運行了(選擇Run>Run)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章