QTQuick LocalStorage База данных версии несоответствия (отсутствующая «версия» атрибут в файле INI)

StackOverflow https://stackoverflow.com//questions/23021373

  •  21-12-2019
  •  | 
  •  

Вопрос

Я использую qtquick / qml / qt5.2.1 на Android. Я также проверил эту проблему на рабочем столе, а не на Android, и я вижу ту же проблему.

Я использую LocalStorage, чтобы сохранить данные приложения после закрытия приложения.

Я открываю базу данных с использованием openDatabaseSync:

var db = LocalStorage.openDatabaseSync(
    "TestDB",
    "1.0",  <-- version
    "Test Database",
    1000000,
    function(db) {
        createSchema(db);
        populateData(db);
    }
);
.

Если база данных не существует и была создана, функция обратного вызова выполняется и в этом случае я создаю схему базы данных и заполнить начальный набор данных.

В следующий раз приложение начинается, очевидно, я хочу сохранить базу данных как есть и не воссоздать ее.

Проблема в том, что я перезапуску приложения, я получаю эту ошибку:

Error: SQL: database version mismatch
.

Если я проверю файл .ini, который был создан, когда база данных была создана в первый раз, когда приложение было запущено, я вижу это:

[General]
Description=Test Database
Driver=QSQLITE
EstimatedSize=1000000
Name=TestDB
Version=
.

Вы можете четко видеть проблему вот в том, что атрибут «версия» пуст.

Когда приложение запускается, он сравнивает запрошенную версию «1.0» против этой пустой строки «» и не удается.

Я могу подделать его, чтобы заставить его работать, конечно, указывая версию как «», или путем исправления INI-файла - что, по крайней мере, сообщает мне код в противном случае - но ясно, что это не решение.

Так, я что-то пропустил или это Qt Bug?

Это было полезно?

Решение

Вы можете установить версию базы данных после ее создания:

var db = LocalStorage.openDatabaseSync(
    "TestDB",
    "1.0",
    "Test Database",
    1000000,
    function(db) {
        createSchema(db);
        populateData(db);
        db.changeVersion("", "1.0");
    }
);
.

Поскольку функция обратного вызова будет названа только в том, что база данных не существует, и функция ChangeVersion будет работать только в том случае, если текущая версия «» (в противном случае, исключение, связанная с исключением), я считаю, что это безопасно использовать.

.

Редактировать: Может быть, это предполагаемое поведение ... из

Другие советы

Установите такие атрибуты в соответствии с указанным выше кодом

 // db = LocalStorage.openDatabaseSync(identifier, version, description, estimated_size, callback(db))
     LocalStorage.openDatabaseSync("kMusicplay", "0.1", "kMusicPlay app Ubuntu", 10000);
.

где 'kmusicplay' это appname, '0.1' это версия, 'kmusicplay app ubuntu' - это описание приложения и «10000» размер базы данных

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top