0

Flash Builder で、ローカル データベースからのデータ取得の基本に苦労しています。Lita を使用して、「DAO」フォルダーに配置された 1 つの基本 (項目) テーブルを持つ SQLite データベースを作成しました。私には2つの問題があります:

  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>
4

2 に答える 2

0

データベースのローカルコピーに関する Marcx とMarcos Placona のブログエントリのおかげで、私はこれを思いつきました:

<?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>
于 2012-05-01T14:58:35.830 に答える
0

質問 1 については、プロジェクトのアセットとしてデータベースを追加できます。エクスポート リリース中にインストーラーに埋め込まれます。ローカルストア フォルダーに配置する場合は、コードからコピー/移動できます...

数 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>
于 2012-05-01T10:23:33.333 に答える