Flash flex创建本地sqlite
我正在尝试在我的移动flex应用程序中将xml转换为sqlite 应该在应用程序中填充一个列表 但是我得到了这些错误:Flash flex创建本地sqlite,flash,sqlite,apache-flex,flash-builder4.5,Flash,Sqlite,Apache Flex,Flash Builder4.5,我正在尝试在我的移动flex应用程序中将xml转换为sqlite 应该在应用程序中填充一个列表 但是我得到了这些错误: SQLError: 'Error #3115: SQL Error.', details:'no such table: 'words'', operation:'execute', detailID:'2013' at flash.data::SQLStatement/internalExecute() at flash.data::SQLStatement/
SQLError: 'Error #3115: SQL Error.', details:'no such table: 'words'', operation:'execute', detailID:'2013'
at flash.data::SQLStatement/internalExecute()
at flash.data::SQLStatement/execute()
at dao::WordsDAO/findByTerm()[C:\Users\sayydo1\Adobe Flash Builder 4.6\sayydo1\src\dao\WordsDAO.as:32]
这是我的WordsDAO.as的代码:
package dao
{
import flash.data.SQLConnection;
import flash.data.SQLStatement;
import flash.filesystem.File;
import flash.filesystem.FileMode;
import flash.filesystem.FileStream;
import dao.Words;
import mx.collections.ArrayCollection;
public class WordsDAO
{
private var _sqlConnection:SQLConnection;
public function get sqlConnection():SQLConnection
{
if (_sqlConnection)
return _sqlConnection;
openDatabase(File.documentsDirectory.resolvePath("EZDemo.db"));
return _sqlConnection;
}
public function findByTerm(searchKey:String):ArrayCollection
{
var sql:String = "SELECT * FROM words WHERE term LIKE '%"+searchKey+"%'";
var stmt:SQLStatement = new SQLStatement();
stmt.sqlConnection = sqlConnection;
stmt.text = sql;
stmt.parameters[1] = searchKey;
stmt.execute();
var result:Array = stmt.getResult().data;
if (result)
{
var list:ArrayCollection = new ArrayCollection();
for (var i:int=0; i<result.length; i++)
{
list.addItem(processRow(result[i]));
}
return list;
}
else
{
return null;
}
}
public function create(words:Words):void
{
trace(words.term);
var sql:String =
"INSERT INTO words (id, term, defin, term1, defin1) " +
"VALUES (?,?,?,?,?)";
var stmt:SQLStatement = new SQLStatement();
stmt.sqlConnection = sqlConnection;
stmt.text = sql;
stmt.parameters[0] = words.id;
stmt.parameters[1] = words.term;
stmt.parameters[2] = words.defin;
stmt.parameters[3] = words.term1;
stmt.parameters[4] = words.defin1;
stmt.execute();
words.loaded = true;
}
protected function processRow(o:Object):Words
{
var words:Words = new Words();
words.id = o.id;
words.term = o.term == null ? "" : o.term;
words.defin = o.defin == null ? "" : o.defin;
words.term1 = o.term1 == null ? "" : o.term1;
words.defin1 = o.defin1 == null ? "" : o.defin1;
words.loaded = true;
return words;
}
public function openDatabase(file:File):void
{
var newDB:Boolean = true;
if (file.exists)
newDB = false;
_sqlConnection = new SQLConnection();
_sqlConnection.open(file);
if (newDB)
{
createDatabase();
populateDatabase();
}
}
protected function createDatabase():void
{
var sql:String =
"CREATE TABLE IF NOT EXISTS words ( "+
"id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"term VARCHAR(50), " +
"defin VARCHAR(250), " +
"term1 VARCHAR(50), " +
"term1 VARCHAR(50), " +
"defin1 VARCHAR(250))";
var stmt:SQLStatement = new SQLStatement();
stmt.sqlConnection = sqlConnection;
stmt.text = sql;
stmt.execute();
}
protected function populateDatabase():void
{
var file:File = File.applicationDirectory.resolvePath("assets/words.xml");
var stream:FileStream = new FileStream();
stream.open(file, FileMode.READ);
var xml:XML = XML(stream.readUTFBytes(stream.bytesAvailable));
stream.close();
for each (var emp:XML in xml.words)
{
var words:Words = new Words();
words.id = emp.id;
words.term = emp.term;
words.defin = emp.defin;
words.term1 = emp.term1;
words.defin1 = emp.defin1;
create(words);
}
}
}
}
我希望这足以澄清我的问题
编辑了进一步的信息…我在这里只是猜测,但是由于您的代码只检查数据库文件的存在,可能是因为以前创建的数据库文件不正确(可能是因为下面提到的重复列问题),即表不存在吗?这将导致您遇到的错误 您的代码还有一些其他问题,一旦修复,您的代码段对我来说就可以了(使用虚拟数据) 重复列 您的代码尝试创建
term1
列两次
“定义VARCHAR(250),”+
term1 VARCHAR(50)+
term1 VARCHAR(50),“+//删除此行
“定义1 VARCHAR(250))”;
这通常会引发错误,导致无法创建表
语句参数无效
您正在索引1
上定义一个未命名的参数
stmt.parameters[1]=搜索键;
当数值索引从0
开始时,仅此一项就会引发错误,但当使用适当的索引时,也会引发错误,因为查询中没有参数
您的代码应该更像这样:
var-sql:String=“从词语中选择*,其中的词语类似于?”;
var stmt:SQLStatement=newsqlstatement();
stmt.sqlConnection=sqlConnection;
stmt.text=sql;
stmt.parameters[0]='%'+搜索键+'%';
// ...
有关准备好的语句的更多信息,请参阅。您是否执行了
createDatabase()
?我想是的,您可以检查代码谢谢,但在控制台中调试后出现另一个错误它加载了一个接一个的列表,然后出现以下错误:警告:无法绑定到类“mx.collections::ArrayCollection”的属性“term”错误:未知属性:“term”。这很可能是在您显示的代码之外的某个地方触发的在这里,和原来的问题没有任何关系了。在绑定中,您可能指向的是ArrayCollection
实例,而不是包含Word
实例。这可能是一个新问题,您可以提供适当的代码、错误消息和堆栈跟踪。
package dao
{
import mx.collections.ArrayCollection;
import flash.utils.ByteArray;
[Bindable]
public class Words
{
public var loaded:Boolean = true;
public var id:int;
public var term:String;
public var defin:String;
public var term1:String;
public var defin1:String;
}
}