Memorizzazione di database SQLite utilizzando Android e Phonegap

Sto sviluppando un'applicazione Android Cordova / Phonegap in cui voglio utilizzare un database SQLite. Ho usato l'esempio dalla documentazione ufficiale.

// Wait for device API libraries to load // document.addEventListener("deviceready", onDeviceReady, false); // Populate the database // function populateDB(tx) { tx.executeSql('DROP TABLE IF EXISTS DEMO'); tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)'); tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")'); tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")'); } // Query the database // function queryDB(tx) { tx.executeSql('SELECT * FROM DEMO', [], querySuccess, errorCB); } // Query the success callback // function querySuccess(tx, results) { var len = results.rows.length; console.log("DEMO table: " + len + " rows found."); for (var i=0; i<len; i++){ console.log("Row = " + i + " ID = " + results.rows.item(i).id + " Data = " + results.rows.item(i).data); } } // Transaction error callback // function errorCB(err) { console.log("Error processing SQL: "+err.code); } // Transaction success callback // function successCB() { var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000); db.transaction(queryDB, errorCB); } // device APIs are available // function onDeviceReady() { var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000); db.transaction(populateDB, errorCB, successCB); } 

Anche se questo sembra funzionare (il database viene creato e riempito senza errori e ricevi i dati scritti con la query), mi chiedo come il database sia memorizzato sul mio dispositivo. Per il debug utilizzo un telefono hardware con Android 4.1.1.

  • Come implementare un efficiente tree di ricerca del gioco di potatura Alpha-Beta?
  • get il nome dell'applicazione dal nome del pacchetto
  • Scaricare i file in coda in Android
  • Come call manualmente `onUpdate` dall'interno del widget stesso
  • Registrazione di video su Android utilizzando JavaCV (aggiornato 2014 02 17)
  • Calcolo dell'applicazione Android in-app: l'acquisto personalizzato di sku dà "Errore - elemento non trovato"
  • Il database si trova sotto /data/data/<myapppackage>/app_database/file__0/0000000000000001.db . Ora volevo esportre il database e analizzarlo manualmente sul mio pc con SQLiteManager, ma sembra che le modifiche non siano scritte nel file db.

    Tuttavia, durante l'esame della directory /data/data/<myapppackage>/app_database/file__0/ i ho trovato i due file temporanei 0000000000000001.db-shm e 0000000000000001.db-wal , i cui timestamp vengono modificati each volta che eseguo un'operazione di database ma mai il file db stesso.

    La mia domanda è, perché i cambiamenti non sono mai stati scritti nel file di database persistente? Non sembra essere un modo per chiudere una connessione di database con il phonegap e anche uccidere l'applicazione manualmente non scrive le modifiche al file .db. Non so cosa ho fatto male.

    Chiunque vede il problema qui?

  • Altezza RelativeLayout per riempire lo spazio rimanente
  • Come disegnare una freccia (in Android)?
  • Grant Uri authorization ad un'altra attività
  • Quanti dispositivi Android supportno oggi GLSurfaceView.setPreserveEGLContextOnPause?
  • Rimuovi la barra del titolo di Android App
  • Android: notifyDataSetChanged (); non funziona
  • 3 Solutions collect form web for “Memorizzazione di database SQLite utilizzando Android e Phonegap”

     tx.executeSql('DROP TABLE IF EXISTS DEMO'); 

    Questa row sopra elimina la tabella denominata DEMO each volta che si avvia l'applicazione Mobile PhoneGap

    E ho solo voluto dirti che amo il tuo codice. Dà un ottimo indizio su "cosa fare" per l'applicazione di PhoneGap o Cordova di nessuno. Sarà notevolmente aiutare chiunque entra nel mondo di SQLite per la prima volta.

    Il codice è molto pulito per leggere e capire rispetto ai codici scritti sul sito ufficiale di Plugin di Cordova / PhoneGap SQLite su GitHub.

    Il mio amico, che lavora anche come CTO di un'azienda e che ha molte esperienze con SQLite, mi ha detto che non è necessario chiudere manualmente una connessione di database SQLite e raccomandi anche SQLite.

    E per chiunque altro cerca SQLite per informazioni PhoneGap / Cordova –

    Diciamo che hai una tabella denominata mytable e desideri memorizzare i valori "bellissimi" e "delfini"

    Quando si desidera eseguire un'operazione sullo SQLite di un dispositivo mobile, ad esempio un tablet o un telefono, ricordarsi di chiamarlo in questo modo

    Avere le seguenti nel codice sorgente

     function insertNewLine(tx) { tx.executeSql("INSERT INTO mytable (word, meaning) VALUES (?,?)", [ var1 , var2 ]); } 

    e memorizzare "bel" all'interno di var1 e "delfino" all'interno di var2 e

    fare la seguente istruzione per eseguire l'istruzione insert SQL e quindi salvare all'interno del dispositivo.

     db.transaction(insertNewLine); 

    Non call direttamente insertNewLine (tx)

    Non call direttamente tx.executeSql (/ * SQL INSERT STATEMENT * /); nel tuo codice sorgente JavaScript

    E non includere i valori direttamente nell'istruzione query SQL e quindi eseguire l'istruzione SQL che include i valori che si desidera archiviare nel database.

    In altre parole, i seguenti sono errati

     tx.executeSql('INSERT INTO mytable (word, meaning) values (beautiful, dolphin)'); 

    Quanto sopra è errato perché i valori che si desidera memorizzare, "bellissimo" e "delfino" sono inclusi nell'istruzione SQL. Devono essere separati.

    Il seguente è il modo corretto per eseguire l'INSERT SQL

     tx.executeSql("INSERT INTO mytable (word, meaning) VALUES (?,?)", [ var1 , var2 ]); // Notice that the values you want to store, beautiful and dolphin // are separate from the SQL INSERT INTO statement 

    quindi eseguire l'intera transazione del database includendo le seguenti nel codice JavaScript

     db.transaction(insertNewLine); 

    non il codice riportto di seguito

     tx.executeSql("INSERT....."); // this will not save your values onto the device 

    non il codice qui sotto

     insertNewLine(tx); // this will not save your values onto the device either. 

    E per utilizzare l'istruzione SELECT SQL, è necessario il seguente codice

     // Get all lines in the table // function viewthelastglory(tx) { tx.executeSql( 'SELECT * FROM CUSTOMTABLE', [], querySuccess, errorcode ); } // Deal with the lines // function querySuccess(tx, results) { var len = results.rows.length; var queryresult = "all entries "; for (var i = 0 ; i < len ; i++) { queryresult = queryresult + " Row - " + i + " Word - " + results.rows.item(i).word + " Meaning - " + results.rows.item(i).meaning; } // and now, you can use the queryresult variable to use the values } function errorcode(errorhaha) { alert("Error Code " + errorhaha.code + " Error Message " + errorhaha.message); } 

    E quindi eseguire la transazione del database

     db.transaction(viewthelastglory); 

    Se stai cercando di scegliere uno da SQLite, WebSQL e IndexedDB, ricorda che ho cercato attorno allo stackoverflow per un po 'e ho appreso che

    • Nessuno ama IndexedDB a causa della sua complessità
    • IndexedDB è incompatibile con molti tipi e versioni del sistema operativo mobile
    • WebSQL è stato deprecato da W3C
    • WebSQL restituisce risultati 673K, ma SQLite restituisce risultati di 1800K. IndexedDB restituisce 300K risultati su Google
    • Fra IndexedDB, SQLite e WebSQL, SQLite è l'unico con un sito ufficiale.

    Il seguente command alla row di command mentre si è nella directory del progetto Cordova installerà il plugin SQLite nel progetto Cordova

     cordova plugin add https://github.com/brodysoft/Cordova-SQLitePlugin 

    La soluzione è: Debug la tua applicazione con l'emulatore invece di un dispositivo fisico.

    Esegui l'applicazione con l' emulator anziché il dispositivo fisico. Troverai il tuo file di database in /data/data/YOUR_PACKAGE_NAME/app_database/ . È ansible pull il file di database e visualizzare le tabelle e i dati.

    In modalità WAL , tutte le modifiche vengono scritte nel file -wal ; il file di database stesso non viene aggiornato fino a quando non viene fatto un punto di controllo .

    Se c'è un file -wal , devi anche copiarlo.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.