跨视图的flex mobile sqlite数据库连接

跨视图的flex mobile sqlite数据库连接,sqlite,flex-mobile,Sqlite,Flex Mobile,我对flex移动环境比较陌生。 我在flex mobile中使用sqlite 我有一个基本的应用程序,它有一个欢迎屏幕和注册 在欢迎屏幕中,如果本地数据库(sqlite)中不存在表,则创建表 欢迎屏幕 <s:creationComplete> dbFile = File.applicationStorageDirectory.resolvePath("testDB.db"); conn = new SQLConnection(); conn.addEventListene

我对flex移动环境比较陌生。 我在flex mobile中使用sqlite

我有一个基本的应用程序,它有一个欢迎屏幕和注册

在欢迎屏幕中,如果本地数据库(sqlite)中不存在表,则创建表

欢迎屏幕

<s:creationComplete>
  dbFile = File.applicationStorageDirectory.resolvePath("testDB.db");
  conn = new SQLConnection();
  conn.addEventListener(SQLErrorEvent.ERROR, errorHandler);
  conn.addEventListener(SQLEvent.OPEN, openHandler);
  conn.openAsync(dbFile);
</s:creationComplete>

in scripts
    public var conn:SQLConnection;
    private var insertUser:SQLStatement;
    private var createUsersTable:SQLStatement = new SQLStatement();
    private var getUser:SQLStatement = new SQLStatement();
    public var dbFile:File;
    private function openHandler(event:SQLEvent):void {
        conn.removeEventListener(SQLEvent.OPEN, openHandler);
        conn.addEventListener(SQLEvent.BEGIN, beginHandler);
        conn.begin();
    }
    private function beginHandler(event:SQLEvent):void {
        conn.removeEventListener(SQLEvent.BEGIN, beginHandler);
        createUsersTable.sqlConnection = conn;
        createUsersTable.text ="CREATE TABLE IF NOT EXISTS users(first_name varchar(100),email VARCHAR(100))";
        createUsersTable.execute();
    }

dbFile=File.applicationStorageDirectory.resolvePath(“testDB.db”);
conn=newsqlconnection();
conn.addEventListener(SQLErrorEvent.ERROR,errorHandler);
conn.addEventListener(SQLEvent.OPEN,openHandler);
conn.openAsync(dbFile);
脚本
公共变量连接:SQLConnection;
私有var插入器:SQLStatement;
私有变量createUsersTable:SQLStatement=newsqlstatement();
私有变量getUser:SQLStatement=newsqlstatement();
公共变量dbFile:File;
私有函数openHandler(事件:SQLEvent):void{
conn.removeEventListener(SQLEvent.OPEN,openHandler);
conn.addEventListener(SQLEvent.BEGIN,beginHandler);
康涅狄格州贝京;
}
私有函数beginHandler(事件:SQLEvent):void{
conn.removeEventListener(SQLEvent.BEGIN,beginHandler);
createUsersTable.sqlConnection=conn;
createUsersTable.text=“如果不存在用户,则创建表(名字为varchar(100),电子邮件为varchar(100))”;
createUsersTable.execute();
}
上述操作非常有效,并且创建了表

在注册屏幕中,我应该像欢迎屏幕中的s:creationComplete一样再次初始化db变量

如果不重复并尝试访问conn(SQLConnection的变量),则会出现此错误

TypeError:Error#1009:无法访问null的属性或方法 对象引用

但在未来,我将有大约30个这样的屏幕,所以我应该在他们的s:creationComplete中为所有屏幕重复代码吗

最后,我想在其他屏幕中轻松打开db连接并执行sqlite操作

请纠正我,如果我错了,或建议更好的方法,如果有的话。
非常感谢

我今天刚刚发布了对此的回复,它可能会帮助您


我不确定您对编程的总体熟悉程度,但通过您在上面发布的内容,您将能够了解正在发生的事情,并获得一些最佳实践(如果您还不知道它们=)。

类似的问题已在此处解决: