2014-06-27 21 views
8

Utilizzo di Cordova versione 3.xe Versione Android 2.xa 4.x.differenza tra le funzioni window.openDatabase() e window.sqlitePlugin.openDatabase()?

Mi chiedo:

  1. è la mia comprensione corretta che tutti i dispositivi Android di default hanno un programma/un'interfaccia SQLite per la creazione di database SQLite?
  2. Le chiamate di funzione del database sopra riportate creano un database SQLite nel dispositivo?
  3. Se la risposta di cui sopra è no, quindi quale tipo di database vengono create entrambe le chiamate di funzione sopra indicate?
  4. Se la risposta è , la funzione è window.sqlite.openDatabase() wrapper di funzione window.openDatabase()?
  5. I database creati dalla chiamata sono persistenti? Cioè, i dati sono disponibili dopo la chiusura e la riapertura delle app impacchettate Cordova?
  6. Esiste la dimensione massima del database che è possibile creare con i due metodi precedenti?

risposta

8
  1. WebSQL (window.openDatabase) è uno standard web deprecato. Ma è disponibile nella maggior parte dei browser desktop e mobili. La maggior parte dei browser implementa le specifiche usando SQLite. In Android, i browser e WebViews supportano WebSQL, insieme all'archiviazione locale e all'archiviazione delle sessioni delle prime versioni e anche IndexedDB da KitKat.

Quindi Android supporta in modo indipendente SQLite da utilizzare dalle API Java come uno dei suoi principali meccanismi di persistenza.

Cordova è speciale. L'app viene eseguita in una WebView, quindi dovrebbe utilizzare WebSQL, ma in Android il plug-in sostituisce l'API e impianta nell'oggetto della finestra nuove funzioni che potrebbero essere predefinite per un'implementazione diversa, anziché l'API del browser.

Quindi, in un'app Cordova, una volta caricata, quando si chiama openDatabase si sta effettivamente chiamando una nuova funzione che Cordova ha inserito nell'oggetto Windows sovrascrivendo quella precedente. Dal Cordova docs:

Alcuni dispositivi offrono già un'implementazione di questo spec. Per questi dispositivi, viene utilizzato il supporto integrato anziché sostituirlo con l'implementazione di Cordova. Per i dispositivi che non dispongono di supporto per l'archiviazione, l'implementazione di Cordova deve essere compatibile con le specifiche W3C.

Quella citazione è ambigua e non più nei documenti. Per "built-in" intendevano il supporto WebSQL integrato in WebView. I documenti che ho collegato sono vecchi, da una versione 2.x. In quelle versioni, Cordova si limitava automaticamente all'implementazione personalizzata se WebView non supportava WebSQL (penso che ciò non sia mai accaduto) o se il dispositivo fosse influenzato dallo bug 16175. L'implementazione predefinita consisteva nell'uso del plug-in Storage.java che utilizzava l'API Java per creare un database SQLite. Ho letto lo most recent sources e versioni più recenti (3.x) che sembrano usare sempre WebSQLite.

  1. Sì, entrambi creano un file DB ma il percorso sarà diverso.In effetti puoi aprire lo stesso DB dal codice JavaScript e il codice Java nella tua app.

  2. Stesso tipo di DB. SQLite è un livello C nativo che gestisce la struttura dei file. Infatti, potresti anche utilizzare questa API C nativa da un'app Android nativa.

  3. Cordova/PhoneGap utilizza SQLIte dal supporto integrato se disponibile (in Android lo è).

  4. Sì, stanno lì.

  5. Sì, c'è un limite. Controlla here per maggiori informazioni.

Problemi correlati