在Mozilla平台上使用SQLite的多个请求时NS_ERROR_FILE_IS_LOCKED

时间:2009-10-30 15:05:13

标签: sqlite xul thunderbird

我正在尝试在Mozilla平台中使用存储机制(在thundebird 3.0中)。

每次测试后使用以下代码擦除数据库中存在的表:

function tearDown()
{
  let database = new Database();

  let req1 = "SELECT name FROM sqlite_master WHERE type='table'";
  let statement = database.connection.createStatement(req1);
  let tables = [];
  while(statement.executeStep()) {
    tables.push(statement.row.name);
  }
  statement.reset();
  for(table in tables) {
    let req2 = "DROP TABLE " + tables[table];
    database.connection.executeSimpleSQL(req2);
  }
}

但是executeSimpleSQL req2NS_ERROR_FILE_IS_LOCKED)期间出现错误,似乎SQLite没有从第一个语句中释放锁定。我尝试了reset()finalize(),但没有任何效果。如何正确释放第一个语句的锁?

2 个答案:

答案 0 :(得分:2)

回答自己:我忘记在我的申请的先前代码中发布先前的陈述。

最后的故事:当你使用

statement.executeStep()

检查:

  • 确保此语句的最后一次调用返回false
  • 或永远不会忘记发布它:

    statement.reset();

答案 1 :(得分:1)

var statement = dbConn.createStatement("SELECT COUNT(name) AS nameOcurrences FROM Table1 WHERE name = '" + aName + "';");

var occurrences;

while(statement.executeStep()) {
   occurrences = statement.row.nameOcurrences; 
}