2017-05-08 6 views
0

私はdelete_s SQL文からメモリを解放するためにVACUUMコマンドに大きな問題があります。sqlite3 vacuum、cordovaでの使い方APP

私はCordova Android APPを作っていますが、DELETE SQL文を使用すると、アプリケーションのスペースがダウンしないことがわかります。このスペースは、断片のHardDiskのように存続します。

次に、VACUUMがDBをコンパクトにすることができますが、問題があります。私は、すべてのサイトでSQLite3の、およびVACUUMを使用

はこのように、それはトランザクション内で実行can't言う:

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); 
    }); 
}); 

[OK]を

、よく、その後、私はトランザクション内で行うことができない場合は、可能性どのように私は真空または自動真空または似たような行のコマンドを書くことなくBDをコンパクトに実行することができますか教えてください?

答えて

1

the GitHub Pageによると、あなたはdb.executeSqlとの取引の外でSQLを実行することができるはずです(そのモバイルアプリということを覚えておいてください):

db.executeSql("VACUUM", [], function(rs) { 
    // ok 
}, function(err) { 
    // handle error 
}); 
+0

こんにちは、助けを おかげで、私は外のことを使用トランザクション。 okブロックの "VACUUM DONE"というメッセージは表示されますが、結果は表示されません。アプリのデータのサイズは、真空の前後で同じです。 – Armando

+0

@Armandoどのくらいのデータを削除していますか? SQLiteはページサイズの倍数でスペースを割り当てます。したがって、少数の行だけを削除する場合、ページを解放するのに十分な空き領域が確保されません。 –

+0

そうですよ!私はbbddテーブルに40000行を挿入し、インストール時の私のアプリケーションのデータサイズは484KBで、40k行は2.18MBです。次に、私のデータサイズを500KBに減らします。あなたの助けのためにTHXの大佐:) – Armando