I need to perform a "VACUUM" on my app database using QtQuick.LocalStorage 2.0 or using the SqlDatabase Type but pointing the database from QtQuick.LocalStorage.Must work on Android and iOS devices. Any idea?
Hi Stephen,
I´m a workmate of Jose, he has some trouble with his account and can´t answer and has told me that send this to you.
Yeah, i know. But i need to do the vacuum to the QtQuick.LocalStorage 2.0 database. Its mandatory to me, due to the needs of the project, use QtQuick.LocalStorage 2.0.
Hi José, in the following example, I'm able to use `VACUUM` on a `SqlDatabase`:
<SPAN class="keyword token">import</SPAN> QtQuick <SPAN class="number token">2.7</SPAN> <SPAN class="keyword token">import</SPAN> QtQuick<SPAN class="punctuation token">.</SPAN>Controls <SPAN class="number token">2.1</SPAN> <SPAN class="keyword token">import</SPAN> ArcGIS<SPAN class="punctuation token">.</SPAN>AppFramework <SPAN class="number token">1.0</SPAN> <SPAN class="keyword token">import</SPAN> ArcGIS<SPAN class="punctuation token">.</SPAN>AppFramework<SPAN class="punctuation token">.</SPAN>Controls <SPAN class="number token">1.0</SPAN> <SPAN class="keyword token">import</SPAN> ArcGIS<SPAN class="punctuation token">.</SPAN>AppFramework<SPAN class="punctuation token">.</SPAN>Sql <SPAN class="number token">1.0</SPAN> App <SPAN class="punctuation token">{</SPAN> id<SPAN class="punctuation token">:</SPAN> app width<SPAN class="punctuation token">:</SPAN> <SPAN class="number token">800</SPAN> height<SPAN class="punctuation token">:</SPAN> <SPAN class="number token">640</SPAN> property string dbFileName<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"sample.sqlite"</SPAN> property string dbFilePath<SPAN class="punctuation token">:</SPAN> sqlFolder<SPAN class="punctuation token">.</SPAN><SPAN class="token function">filePath</SPAN><SPAN class="punctuation token">(</SPAN>dbFileName<SPAN class="punctuation token">)</SPAN> ListView <SPAN class="punctuation token">{</SPAN> id<SPAN class="punctuation token">:</SPAN> listView property ListModel logListModel<SPAN class="punctuation token">:</SPAN> ListModel <SPAN class="punctuation token">{</SPAN> <SPAN class="punctuation token">}</SPAN> anchors<SPAN class="punctuation token">.</SPAN>fill<SPAN class="punctuation token">:</SPAN> parent anchors<SPAN class="punctuation token">.</SPAN>margins<SPAN class="punctuation token">:</SPAN> <SPAN class="number token">10</SPAN> model<SPAN class="punctuation token">:</SPAN> logListModel delegate<SPAN class="punctuation token">:</SPAN> Text <SPAN class="punctuation token">{</SPAN> text<SPAN class="punctuation token">:</SPAN> logText <SPAN class="punctuation token">}</SPAN> <SPAN class="keyword token">function</SPAN> <SPAN class="token function">log</SPAN><SPAN class="punctuation token">(</SPAN>logText<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN> logListModel<SPAN class="punctuation token">.</SPAN><SPAN class="token function">append</SPAN><SPAN class="punctuation token">(</SPAN> <SPAN class="punctuation token">{</SPAN> logText<SPAN class="punctuation token">:</SPAN> logText <SPAN class="punctuation token">}</SPAN> <SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="punctuation token">}</SPAN> <SPAN class="punctuation token">}</SPAN> FileFolder <SPAN class="punctuation token">{</SPAN> id<SPAN class="punctuation token">:</SPAN> sqlFolder path<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"~/ArcGIS/Data/Sql"</SPAN> <SPAN class="punctuation token">}</SPAN> SqlDatabase <SPAN class="punctuation token">{</SPAN> id<SPAN class="punctuation token">:</SPAN> db databaseName<SPAN class="punctuation token">:</SPAN> dbFilePath <SPAN class="punctuation token">}</SPAN> <SPAN class="keyword token">function</SPAN> <SPAN class="token function">db_exec_sql</SPAN><SPAN class="punctuation token">(</SPAN>sql<SPAN class="punctuation token">,</SPAN> obj<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN> listView<SPAN class="punctuation token">.</SPAN><SPAN class="token function">log</SPAN><SPAN class="punctuation token">(</SPAN> <SPAN class="string token">"db_exec_sql.sql: %1"</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">arg</SPAN><SPAN class="punctuation token">(</SPAN>sql<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>obj <SPAN class="operator token">!=</SPAN> <SPAN class="keyword token">null</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN> listView<SPAN class="punctuation token">.</SPAN><SPAN class="token function">log</SPAN><SPAN class="punctuation token">(</SPAN> <SPAN class="string token">"db_exec_sql.obj: %1"</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">arg</SPAN><SPAN class="punctuation token">(</SPAN>JSON<SPAN class="punctuation token">.</SPAN><SPAN class="token function">stringify</SPAN><SPAN class="punctuation token">(</SPAN>obj<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="punctuation token">}</SPAN> <SPAN class="keyword token">var</SPAN> query <SPAN class="operator token">=</SPAN> obj <SPAN class="operator token">!=</SPAN> <SPAN class="keyword token">null</SPAN> <SPAN class="operator token">?</SPAN> db<SPAN class="punctuation token">.</SPAN><SPAN class="token function">query</SPAN><SPAN class="punctuation token">(</SPAN>sql<SPAN class="punctuation token">,</SPAN> obj<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">:</SPAN> db<SPAN class="punctuation token">.</SPAN><SPAN class="token function">query</SPAN><SPAN class="punctuation token">(</SPAN>sql<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="keyword token">if</SPAN> <SPAN class="punctuation token">(</SPAN>query<SPAN class="punctuation token">.</SPAN>error<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN> listView<SPAN class="punctuation token">.</SPAN><SPAN class="token function">log</SPAN><SPAN class="punctuation token">(</SPAN> <SPAN class="string token">"query.error: %1"</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">arg</SPAN><SPAN class="punctuation token">(</SPAN>query<SPAN class="punctuation token">.</SPAN>error<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="keyword token">return</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="punctuation token">}</SPAN> <SPAN class="keyword token">var</SPAN> ok <SPAN class="operator token">=</SPAN> query<SPAN class="punctuation token">.</SPAN><SPAN class="token function">first</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="keyword token">while</SPAN> <SPAN class="punctuation token">(</SPAN>ok<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">{</SPAN> listView<SPAN class="punctuation token">.</SPAN><SPAN class="token function">log</SPAN><SPAN class="punctuation token">(</SPAN> <SPAN class="string token">"query.values: %1"</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">arg</SPAN><SPAN class="punctuation token">(</SPAN>JSON<SPAN class="punctuation token">.</SPAN><SPAN class="token function">stringify</SPAN><SPAN class="punctuation token">(</SPAN>query<SPAN class="punctuation token">.</SPAN>values<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> ok <SPAN class="operator token">=</SPAN> query<SPAN class="punctuation token">.</SPAN><SPAN class="token function">next</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="punctuation token">}</SPAN> query<SPAN class="punctuation token">.</SPAN><SPAN class="token function">finish</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="punctuation token">}</SPAN> Component<SPAN class="punctuation token">.</SPAN>onCompleted<SPAN class="punctuation token">:</SPAN> <SPAN class="punctuation token">{</SPAN> listView<SPAN class="punctuation token">.</SPAN><SPAN class="token function">log</SPAN><SPAN class="punctuation token">(</SPAN> <SPAN class="string token">"dbFileName: %1"</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">arg</SPAN><SPAN class="punctuation token">(</SPAN>dbFileName<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> listView<SPAN class="punctuation token">.</SPAN><SPAN class="token function">log</SPAN><SPAN class="punctuation token">(</SPAN> <SPAN class="string token">"dbFilePath: %1"</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">arg</SPAN><SPAN class="punctuation token">(</SPAN>dbFilePath<SPAN class="punctuation token">)</SPAN> <SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> sqlFolder<SPAN class="punctuation token">.</SPAN><SPAN class="token function">makeFolder</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> db<SPAN class="punctuation token">.</SPAN><SPAN class="token function">open</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="token function">db_exec_sql</SPAN><SPAN class="punctuation token">(</SPAN> <SPAN class="string token">"DROP TABLE IF EXISTS people"</SPAN> <SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="token function">db_exec_sql</SPAN><SPAN class="punctuation token">(</SPAN> <SPAN class="string token">"CREATE TABLE people (NAME text)"</SPAN> <SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="token function">db_exec_sql</SPAN><SPAN class="punctuation token">(</SPAN> <SPAN class="string token">"INSERT INTO people VALUES (:name) "</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> name<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'Bill Gates'</SPAN> <SPAN class="punctuation token">}</SPAN> <SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="token function">db_exec_sql</SPAN><SPAN class="punctuation token">(</SPAN> <SPAN class="string token">"INSERT INTO people VALUES (:name) "</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">{</SPAN> name<SPAN class="punctuation token">:</SPAN> <SPAN class="string token">'Jack Dangermond'</SPAN> <SPAN class="punctuation token">}</SPAN> <SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="token function">db_exec_sql</SPAN><SPAN class="punctuation token">(</SPAN> <SPAN class="string token">"SELECT * FROM people"</SPAN> <SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="token function">db_exec_sql</SPAN><SPAN class="punctuation token">(</SPAN> <SPAN class="string token">"VACUUM"</SPAN> <SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="token function">db_exec_sql</SPAN><SPAN class="punctuation token">(</SPAN> <SPAN class="string token">"SELECT * FROM people"</SPAN> <SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN> <SPAN class="punctuation token">}</SPAN> <SPAN class="punctuation token">}</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
The program completes successfully, and, because I use `~/ArcGIS/Data/Sql`, the folder will exist on all platforms. The output I get when I run the above on Windows is:
dbFileName: sample.sqlite dbFilePath: C:/Users/stephen/ArcGIS/Data/Sql/sample.sqlite db_exec_sql.sql: DROP TABLE IF EXISTS people db_exec_sql.sql: CREATE TABLE people (NAME text) db_exec_sql.sql: INSERT INTO people VALUES (:name) db_exec_sql.obj: {"name":"Bill Gates"} db_exec_sql.sql: INSERT INTO people VALUES (:name) db_exec_sql.obj: {"name":"Jack Dangermond"} db_exec_sql.sql: SELECT * FROM people query.values: {"NAME":"Bill Gates"} query.values: {"NAME":"Jack Dangermond"} db_exec_sql.sql: VACUUM db_exec_sql.sql: SELECT * FROM people query.values: {"NAME":"Bill Gates"} query.values: {"NAME":"Jack Dangermond"}<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
I tried to execute a VACUUM using LocalStorage, but is not able to run it because it must be executed from outside a transaction.
function repackingDatabase(){ var db = LocalStorage.openDatabaseSync("BLAHBLAHBLAH_DB", "", "Local database", 1000000); try { db.transaction(function (tx) { tx.executeSql('VACUUM;'); }) } catch (err) { console.exception("Error repacking the Database: " + err); };}
My database must sometimes handle a large amount of data.But even if you delete those rows or even delete the tables the space occupied by the app continues to increase.
José can you tell us what you have tried?
Membros conectados podem postar, seguir atualizações e mais. Novo aqui? Registre uma conta gratuita.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.