Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash flex创建本地sqlite_Flash_Sqlite_Apache Flex_Flash Builder4.5 - Fatal编程技术网

Flash flex创建本地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/

我正在尝试在我的移动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/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;



    }

}