Соединение с базой данных SQLite вносит изменения в память, но не сохраняет в файл - AS3 AIR - PullRequest
0 голосов
/ 06 апреля 2011

Я пытаюсь записать в локальную базу данных SQLite, используя классы flash.data.* в AIR.Я открываю синхронное соединение в режиме 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.

Ответы [ 3 ]

1 голос
/ 08 апреля 2011

Первое, что я хотел бы спросить, откуда вы знаете, что это не касается?Отметка?Или вы запрашиваете товар и не находите его?

Основная причина, по которой я спрашиваю, вызывает у меня подозрение по этому коду:

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

Я думаю,// неверен, и я думаю, что возможно ваша БД окажется где-то не там, где вы думаете, скорее всего, в корневой файловой системе.Если моя теория верна, вы записываете данные в другую базу данных, отличную от той, которую вы думаете, а не просто «в памяти».

1 голос
/ 06 апреля 2011

Проверяли ли вы параметры, определенные прагмой?Например, http://www.sqlite.org/pragma.html#pragma_synchronous может вызвать такое поведение.

0 голосов
/ 10 апреля 2011

Я исправил проблему.В итоге я переписал код для доступа к базе данных.Я не уверен, где именно проблема, что-то, что я, должно быть, упустил из виду.Спасибо всем за помощь.

...