В связи с недавним обновлением в Google Play Store, которое сообщило, что все приложения должны быть совместимы с 64-битной версией для обслуживания в Play Store, я попытался обновить наше приложение Cordova Android до 64-битной.
Следуя совету Google, мы определили, что существует только один из наших плагинов Cordova, который не является 64-битным. Однако это вызывает болезненные проблемы.
Плагин, о котором идет речь, был cordova-sqlcipher-adapter
. Мы использовали это для шифрования наших баз данных SQLite и для обслуживания баз данных для приложения. Теперь мы удалили зависимость от этого плагина в аспекте шифрования. Таким образом, это освобождает нас от возможности обновления до 64-разрядного.
При попытке обновить это, мы поняли, что этот плагин построен на другом плагине, cordova-sqlite-storage
, который обрабатывает открытие баз данных и выполнение команд. Поэтому, чтобы упростить задачу, мы удалили cordova-sqlcipher-adapter
и добавили плагин cordova-sqlite-storage
, чтобы гарантировать отсутствие проблем с аспектом шифрования.
При запуске приложения с использованием нового плагина в 64-битной средесовместимая версия, ошибки приложения при попытке выполнить запросы к одной из баз данных.
Возвращенная ошибка:
Error: a statement error callback did not return false: no such table: RNM_Setting (code 1): , while compiling: SELECT s.Value AS [Value] FROM <MYTABLE> s WHERE s.[Key] = <PARAM>
Мы пробовали разные версии, но всегдав конечном итоге с той же проблемой и не может найти другой способ взаимодействия с базами данных SQLite из приложения Android Cordova.
Мы подтвердили, что рассматриваемая база данных существует в правильном каталоге и заполнена данными и таблицей ввопрос. Мы даже вытащили базу данных и выполнили точный запрос, который не может быть проблемой базы данных.
Код, используемый для открытия базы данных:
SQLiteWrapper.prototype.OpenDatabase = function () {
var self = this;
if (this.db === null && this.hasSqlite) {
this.db = window.sqlitePlugin.openDatabase({ name: this.dbName, iosDatabaseLocation: 'Documents' });
}
};
this.GetSettingValue = function (settingKey, successCallback, failCallback) {
var self = this;
try {
var sql = ["SELECT ",
" s.Value AS [Value] ",
"FROM ",
" <MYTABLE> s ",
"WHERE ",
" s.[Key] = ? "];
sql = sql.join("");
var params = [settingKey];
this.sql.GetSingleItem(sql, params, this.ReadSettingFromDb, successCallback, fail);
} catch (e) {
fail(e);
}
function fail(e) {
self.CallbackError(failCallback, "GetSettingValue", e);
};
}
SQLiteWrapper.prototype.GetSingleItem = function (sql, params, rowRead, successCallback, failCallback) {
var self = this;
try {
this.OpenDatabase();
this.db.transaction(function (tx) {
tx.executeSql(sql, params, executeSuccess, executeFail);
}, function (e) {
fail(e);
});
function executeSuccess(tx, rs) {
var item = null;
try {
if (rs.rows.length > 0) {
var row = rs.rows.item(0);
item = rowRead(row);
}
successCallback(item);
} catch (e) {
fail(e);
}
}
function executeFail(tx, e) {
fail(e);
}
} catch (e) {
fail(e);
}
function fail(e) {
self.CallbackError(failCallback, "GetSingleItem", e);
}
};
this.ReadSettingFromDb = function (row) {
return row.Value;
};
Мы находимсяТеперь немного затрудняюсь, как взаимодействовать с базой данных SQLite в 64-битном режиме. Любая помощь для достижения этого будет принята с благодарностью.