我仍然是Adobe Air / Flex的新手,而且还是SQL的新手。
我已经下载了this(http://coenraets.org/blog/2008/11/using-the-sqlite-database-access-api-in-air ... -part-1 /)代码并且一直在查看它,我正在尝试实现相同的想法。
我认为这只是一些愚蠢的事情。我正在使用Flex Builder。我制作了一个新的桌面应用程序项目,没有导入任何内容。
我添加了一个DataGrid对象并将其绑定到ArrayCollection:
我正在尝试这样做,当程序初始化时,它将从数据库中加载数据(如果存在),否则它将创建一个新数据。
问题是,当应用程序运行时,datagrid为空。没有列标题,没有数据,没有。我已经尝试过改变一大堆东西,我已经使用调试器来确保所有函数都被调用,就像它们应该的那样。我不知道我做错了什么。我已经将我的代码与前面提到的代码进行了比较,我在Google上寻找过教程。谁知道我做错了什么?
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="672" height="446"
applicationComplete="onFormLoaded()"
title="iRecipes">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
private var sqlConnection:SQLConnection;
[Bindable] private var recipeList:ArrayCollection;
private function onFormLoaded():void
{
sqlConnection = new SQLConnection();
openDataBase();
}
private function openDataBase():void
{
var file:File = File.userDirectory.resolvePath("recipes.db");
sqlConnection.open(file, SQLMode.CREATE);
if(!file.exists)
{
createDatabase();
}
populateRecipeList()
}
private function createDatabase():void
{
var statement:SQLStatement = new SQLStatement();
statement.sqlConnection = sqlConnection;
statement.text = "CREATE TABLE Recipes (recipeId INTEGER PRIMARY KEY AUTOINCREMENT, recipeName TEXT, authorName TEXT)";
statement.execute();
statement.text = "INSERT INTO Recipes (recipeName, authorName) VALUES (:recipeName, :authorName)";
statement.parameters[":recipeName"] = "Soup";
statement.parameters[":authorName"] = "Joel Johnson";
statement.execute();
statement.parameters[":recipeName"] = "Garbage";
statement.parameters[":authorName"] = "Bob Vila";
statement.execute();
}
private function populateRecipeList():void
{
var statement:SQLStatement = new SQLStatement();
statement.sqlConnection = sqlConnection;
statement.text = "SELECT * FROM Recipes";
statement.execute();
recipeList = new ArrayCollection(statement.getResult().data);
}
]]>
</mx:Script>
<mx:DataGrid dataProvider="{recipeList}">
</mx:DataGrid>
</mx:WindowedApplication>
答案 0 :(得分:3)
我刚试了一下你的代码。我做了一个更改并删除了条件,因为我收到了关于不存在的表的错误。
//if(!file.exists)
//{
createDatabase();
//}
这使得datagrid显示正确的信息。我认为初始化数据库文件的方式有问题。我现在正在研究它。
尝试使用
sqlConnection.open(file, SQLMode.CREATE);
相反,用于打开数据库。
答案 1 :(得分:3)
谢谢脚。有了你的建议,我相信我已经明白了。我将if语句更改为:
if(!file.exists)
{
sqlConnection.open(file, SQLMode.CREATE);
createDatabase();
}
else
{
sqlConnection.open(file, SQLMode.UPDATE);
}
它很棒。谢谢你的帮助。