NS_ERROR_FILE_IS_LOCKED, когда несколько запросов с использованием SQLite на платформе Mozilla - PullRequest
0 голосов
/ 30 октября 2009

Я пытаюсь использовать механизм хранения на платформе 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 из req2 (NS_ERROR_FILE_IS_LOCKED) произошла ошибка. Кажется, что SQLite не снимает блокировку с первого оператора. Я пробовал reset(), finalize(), но ничего не работает. Как правильно снять блокировку первого оператора?

Ответы [ 2 ]

2 голосов
/ 30 октября 2009

Отвечая себе: я забыл опубликовать предыдущее утверждение в предыдущем коде моего приложения.

Финальная история: когда вы используете

statement.executeStep()

Проверка:

  • убедитесь, что последний вызов этого оператора вернул false
  • или никогда не забывал выпустить его:

    statement.reset ();

1 голос
/ 11 марта 2013
var statement = dbConn.createStatement("SELECT COUNT(name) AS nameOcurrences FROM Table1 WHERE name = '" + aName + "';");

var occurrences;

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