sqlite3 вакуум, как использовать приложение Cordova

У меня большая проблема с командой VACUUM для освобождения памяти от SQL-предложений удаления.

Я делаю Android-приложение Cordova, и я знаю, что когда я использую предложение DELETE SQL, пространство приложения не уменьшается, ... пространство сохраняется как фрагмент жесткого диска.

Затем я вижу, что VACUUM может сжать мою БД, но у меня есть проблема!

Я использую SQLite3, и VACUUM на всех сайтах говорит, что не может выполнить транзакцию, например:

var db = window.sqlitePlugin.openDatabase({name:"maintenance", location:'default'});
db.transaction(function (tx) {
   tx.executeSql('VACUUM', [], function (tx, results) {
      alert('done');
 }, function (tx, error) {
      alert('error');
      alert(error.message);
   });
});

Хорошо, тогда, если я не могу выполнить транзакцию, не могли бы вы сказать мне, как я могу выполнить очистку или автоматическую очистку или что-то подобное для сжатия BD без записи линейной команды? (помните, что это мобильное приложение)


person Armando    schedule 08.05.2017    source источник


Ответы (1)


Согласно странице GitHub, вы должны иметь возможность выполнять SQL вне транзакции с db.executeSql:

db.executeSql("VACUUM", [], function(rs) {
    // ok
}, function(err) {
    // handle error
});
person Colonel Thirty Two    schedule 09.05.2017
comment
Привет, Спасибо за помощь, я использую это вне транзакции. Сообщение VACUUM DONE в блоке ok отображается, но результата нет. Размер данных приложения одинаков после и до вакуума. - person Armando; 10.05.2017
comment
@Armando Сколько данных вы удаляете? SQLite выделяет пространство, кратное размеру его страницы, поэтому, если вы удаляете только несколько строк, места не будет достаточно для освобождения страницы. - person Colonel Thirty Two; 10.05.2017
comment
Вот так! Я вставил 40000 строк в таблицу bbdd, размер данных моего приложения при установке составляет 484 КБ, а с 40 000 строк — 2,18 МБ. Затем с помощью вакуума уменьшите размер моих данных до 500 КБ. THX Полковник за вашу помощь :) - person Armando; 11.05.2017