2012-05-01 105 views
0

在Flash構建器中,我正努力從本地數據庫中檢索數據。使用Lita,我創建了一個包含位於「DAO」文件夾中的單個基本(項目)表的SQLite數據庫。它旨在填充List。我有兩個問題:將Flex連接到SQLite

  1. 如何嵌入數據庫(及其所有預填充的數據),而無需從頭開始重新創建它,如許多教程中所示?
  2. 對於原型的目的,如何鏈接數據直接在列表中檢索一個MXML文件而不產生許多其他類(確定,在此情況下,所需的類的數量將是有限的),例如:
<?xml version="1.0" encoding="utf-8"?> 
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     title="HomeView" > 

<fx:Script> 

    <![CDATA[ 

     import flash.data.SQLConnection 
     import flash.data.SQLStatement; 
     import flash.filesystem.File; 
     import flash.filesystem.FileMode; 
     import mx.collections.ArrayCollection;` 

     private function get myData():ArrayCollection 
     { 
      var stmt:SQLStatement = new SQLStatement(); 
      stmt.sqlConnection = new SQLConnection(); 

      stmt.sqlConnection.open(File.applicationStorageDirectory.resolvePath("dao/MyDatabase.db")); 
      stmt.text = "SELECT id, name FROM Item"; 

      stmt.execute(); 
      var result:Array = stmt.getResult().data; 

      if (result) 
      { 
       var list:ArrayCollection = new ArrayCollection(); 
       list.source(result); 
       return list; 
      } else { 
       return null; 
      } 
     } 
     ]]> 
    </fx:Script> 

    <s:List id="list" top="0" bottom="0" left="0" right="0" 
      dataProvider="{myData}" > 
    <s:itemRenderer> 
    <fx:Component> 
    <s:IconItemRenderer label="{myData.name}"> 
    </s:IconItemRenderer> 
    </fx:Component> 
    </s:itemRenderer> 
    </s:List> 
    </s:View> 
+0

我不能辨別NR 2個問題 – RIAstar

回答

0

感謝Marcx和複製數據庫Marcos Placona's Blog進入本地,我想出了這一點:

<?xml version="1.0" encoding="utf-8"?> 
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
     xmlns:s="library://ns.adobe.com/flex/spark" 
     title="HomeView" > 

<fx:Script> 

    <![CDATA[ 

     import flash.data.SQLConnection 
     import flash.data.SQLStatement; 
     import flash.filesystem.File; 
     import flash.filesystem.FileMode; 
     import mx.collections.ArrayCollection; 

     private function get myData():ArrayCollection 
     { 
      var myData:String = "dao/MyDatabase.db"; 
      var embededSessionDB:File = File.applicationDirectory.resolvePath(myData); 
      var writeSessionDB:File = File.applicationStorageDirectory.resolvePath(myData); 
      // If a writable DB doesn't exist, we then copy it into the app folder so it's writteable 
      if (!writeSessionDB.exists) 
      { 
      embededSessionDB.copyTo(writeSessionDB); 
      } 

      var stmt:SQLStatement = new SQLStatement(); 
      stmt.sqlConnection = new SQLConnection(); 

      stmt.sqlConnection.open(File.applicationStorageDirectory.resolvePath(myData)); 
      stmt.text = "SELECT id, name FROM Item"; 

      stmt.execute(); 
      var result:Array = stmt.getResult().data; 

      stmt.execute(); 
      var result:Array = stmt.getResult().data; 
      var r:ArrayCollection = new ArrayCollection(); 

      if (result) 
      {  
       r.source = result; 
       return r; 
      }else{ 
       return null; 
      } 
     } 

     [Bindable]private var resultArr:ArrayCollection = getData(); 

     ]]> 

    </fx:Script> 

    <s:List id="list" top="0" bottom="0" left="0" right="0" 
      dataProvider="{myData}" label="name"> 
    </s:List> 
    </s:View> 
0

對於問題1,如果你想將它放入您可以複製localstore文件夾,你可以出口釋放將被內嵌到安裝程序,然後在添加數據庫作爲項目的資產,/移動它來自代碼...

對於數字2

import flash.data.SQLConnection 
    import flash.data.SQLStatement; 
    import flash.filesystem.File; 
    import flash.filesystem.FileMode; 
    import mx.collections.ArrayCollection;` 

    [Bindable]private var resultArr:ArrayCollection = new ArrayCollection(); 

    private function getData():ArrayCollection 
    { 
     var stmt:SQLStatement = new SQLStatement(); 
     stmt.sqlConnection = new SQLConnection(); 

     stmt.sqlConnection.open(File.applicationStorageDirectory.resolvePath("dao/MyDatabase.db")); 
     stmt.text = "SELECT id, name FROM Item"; 

     stmt.execute(); 
     var result:Array = stmt.getResult().data; 

     resultArr = new ArrayCollection(); 
     if (result) 
     {  
      resultArr.source = result;   
     } 
    } 
    ]]> 
</fx:Script> 

<s:List id="list" top="0" bottom="0" left="0" right="0" 
     dataProvider="{resultArr}" labelField="name" > 
</s:List>