【问题标题】:SQLite database connection is making changes in memory but not saving to the file - AS3 AIRSQLite 数据库连接在内存中进行更改但未保存到文件 - AS3 AIR
【发布时间】:2011-04-05 23:33:47
【问题描述】:

我正在尝试使用 AIR 中的 flash.data.* 类写入本地 SQLite 数据库。我在CREATE 模式下打开一个同步连接,并使用begin()commit() 方法来执行查询。一切似乎都按预期执行。正在调用查询execute() 和连接commit() 方法的成功处理程序,连接对象的totalChanges 属性正在递增,除了没有写入数据库文件 之外,一切看起来都很好。有什么想法我可能做错了吗?

我认为这与...无关

  • 查询本身,因为那是 每当有事时抛出错误 不匹配。
  • 文件模式出于同样的原因。
  • 文件权限 - 当前设置为 777

简化版代码:

var database:File = new File(File.applicationDirectory.nativePath + "//" + PATH_TO_DB );
var connection:SQLConnection = new SQLConnection();
connection.open( database, SQLMode.CREATE );
connection.begin();

var statement:SQLStatement = new SQLStatement();
statement.sqlConnection = connection;
statement.addEventListener(SQLEvent.RESULT, onQueryResult);
statement.addEventListener(SQLErrorEvent.ERROR, onQueryError);

statement.text = "INSERT INTO myCrazyTable (foo) VALUES ('bar')";
statement.execute();
connection.commit(new Responder(onCommitComplete));

function onQueryResult(event:SQLEvent):void {
    trace("Query successful"); // this is getting called
}

function onQueryError(event:SQLErrorEvent):void {
    trace("Error in query: " + event.error.message);
}   

function onCommitComplete(event:SQLEvent):void {
    trace("Commit Success"); // this is getting called
    connection.close();
}

// Database isn't getting touched.

【问题讨论】:

    标签: database sqlite file-io air dao


    【解决方案1】:

    您是否检查了 pragma 定义的选项?例如http://www.sqlite.org/pragma.html#pragma_synchronous 可能会导致此行为。

    【讨论】:

    • 我已将 PRAGMA 同步设置为 FULL(我也尝试过 NORMAL)。仍然看到这种行为。您是否知道任何其他可能导致此问题的设置?
    • 我认为任何其他 PRAGMA 选项都不会影响它。我认为 FULL 和 NORMAL 都可以。
    • 我不是 AIR 专家,但也许错误出在其他地方。我认为connection.commit() 语句应该放在statement.execute() 之后。否则在执行插入之前关闭连接。
    • 你是对的。我会解决的。这不是我的工作代码中的问题,我只是草率地编写了示例。
    【解决方案2】:

    我要问的第一件事是,你怎么知道它没有被触摸?时间戳?还是您正在查询该项目但没有找到它?

    我问的主要原因是,我对这段代码持怀疑态度:

    var database:File = new File(File.applicationDirectory.nativePath + "//" + PATH_TO_DB );

    我认为 // 是不正确的,并且我认为您的数据库可能会在您认为的位置以外的地方结束,很可能在根文件系统中。如果我的理论是正确的,那么您正在将数据写入与您想象的不同的数据库,而不仅仅是“在内存中”。

    【讨论】:

    • 嘿,丹,好点子。这是我检查的第一件事。该文件正在解析到硬盘驱动器上的正确位置。
    • 您接受了这个作为“正确答案”。您发现这是问题所在还是什么?
    • 没有。但这是一个很好的建议。我想我自己的答案是正确的。
    【解决方案3】:

    我解决了这个问题。我最终重写了访问数据库的代码。我不确定问题出在哪里,我一定是忽略了一些东西。感谢大家的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-25
      • 2018-12-29
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      相关资源
      最近更新 更多