0

在 Flash builder 中,我正在努力解决从本地数据库中检索数据的基础知识。使用 Lita,我创建了一个 SQLite 数据库,其中包含位于“DAO”文件夹中的单个基本(项目)表。它旨在填充一个列表。我有两个问题:

  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

对于问题 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>
于 2012-05-01T10:23:33.333 回答
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 回答