Unterschied zwischen den Funktionen window.openDatabase () und window.sqlitePlugin.openDatabase ()?

8

Mit Cordova Version 3.x und Android Version 2.x bis 4.x.

Ich frage mich:

  1. Ist mein Verständnis richtig, dass alle Android-Geräte standardmäßig ein SQLite-Programm / Interface zum Erstellen einer SQLite-Datenbank haben?
  2. Erstellen beide oben genannten Datenbankfunktionsaufrufe eine SQLite-Datenbank im Gerät?
  3. Wenn die obige Antwort no ist, welche Art von Datenbank erstellen beide oben genannten Funktionsaufrufe?
  4. Wenn die Antwort yes lautet, dann ist window.sqlite.openDatabase() function wrapper um window.openDatabase() ?
  5. Sind die vom Anruf erzeugten Datenbanken persistent? Das heißt, sind die Daten nach dem Schließen und erneutem Öffnen der cordova-Paket-Apps verfügbar?
  6. Gibt es eine maximale Datenbankgröße, die mit den beiden obigen Methoden erstellt werden kann?
frank 27.06.2014, 10:28
quelle

1 Antwort

8
  1. WebSQL ( window.openDatabase ) ist ein veralteter Webstandard. Aber es ist in den meisten Desktop- und mobilen Browsern verfügbar. Die meisten Browser implementieren die Spezifikation mit SQLite. In Android unterstützen Browser und WebViews WebSQL zusammen mit lokalem Speicher und Sitzungsspeicher der ersten Versionen sowie IndexedDB seit KitKat.

Dann haben wir Android, das unabhängig SQLite unterstützt, um von Java APIs als einer seiner wichtigsten Persistenzmechanismen verwendet zu werden.

Cordova ist etwas Besonderes. Die App wird in einem WebView ausgeführt, sodass sie WebSQL verwenden sollte. In Android überschreibt das Plug-In jedoch die API und fügt neue Funktionen in das Fensterobjekt ein, die möglicherweise anstelle der Browser-API eine andere Implementierung verwenden.

Wenn Sie also in einer Cordova-App geladen haben, rufen Sie bei Aufruf von openDatabase tatsächlich eine neue Funktion auf, die Cordova in das windows-Objekt eingefügt hat, wobei die alte Standardfunktion überschrieben wird. Aus der Cordova-Dokumentation :

  

Einige Geräte bieten bereits eine Implementierung dieser Spezifikation. Für diese Geräte wird die integrierte Unterstützung verwendet, anstatt sie durch die Cordova-Implementierung zu ersetzen. Für Geräte, die keine Speicherunterstützung haben, sollte Cordovas Implementierung mit der W3C-Spezifikation kompatibel sein.

Dieses Zitat ist mehrdeutig und nicht mehr in den Dokumenten enthalten. Für "eingebaut" bedeutete das integrierte WebSQL-Unterstützung im WebView. Die Dokumente, die ich verlinkte, sind alt, ab einer 2.x-Version. In diesen Versionen war Cordova nur dann auf die benutzerdefinierte Implementierung voreingestellt, wenn WebView WebSQL nicht unterstützte (ich denke, dass dies nie geschehen ist) oder wenn das Gerät von der Fehler 16175 . Die Standardimplementierung bestand darin, das Storage.java -Plugin zu verwenden, das die Java-API zum Erstellen einer SQLite-Datenbank verwendet hat. Ich habe die neuesten Quellen und die neueren (3.x) Versionen gelesen WebSQLite immer zu verwenden.

  1. Ja beide erstellen eine DB-Datei, aber der Pfad zu ihr wird anders sein. Tatsächlich können Sie die gleiche DB aus dem JavaScript-Code und dem Java-Code in Ihrer App öffnen.

  2. Gleiche Art von DB. SQLite ist eine native C-Ebene, die die Dateistruktur verwaltet. Tatsächlich könnten Sie diese native C-API auch von einer nativen Android-App aus verwenden.

  3. Cordova / Phonegap verwendet SQLIte von der integrierten Unterstützung, wenn verfügbar (in Android ist es).

  4. Ja, sie bleiben dort.

  5. Ja, es gibt ein Limit. Überprüfen Sie hier , um weitere Informationen zu erhalten.

Mister Smith 27.06.2014, 13:16
quelle