我对 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();
}
以上工作完美,并创建了表格。
在注册屏幕中,我是否应该像在欢迎屏幕中的 s:creationComplete一样再次初始化 db 变量。
如果我不重复并尝试访问 conn(SQLConnection 的变量),这是我得到的错误
TypeError:错误 #1009:无法访问空对象引用的属性或方法。
但是将来我将拥有大约 30 个这样的屏幕,所以我是否必须在他们的 s:creationComplete 中重复所有屏幕的代码?
最后,我想轻松地在其他屏幕中打开数据库连接并执行我的 sqlite 操作。
如果我错了,请纠正我或提出更好的方法(如果有)。非常感谢