websql example ejemplos datos crear conexion conectar con html5 sqlite local-storage indexeddb

ejemplos - web sql database html5 example



Acceso sin conexión-SQLite o DB indexado? (8)

Estoy en la fase de I + D de desarrollar una aplicación, con los siguientes requisitos clave:

  • Aplicación web HTML5 - que también tendrá una versión híbrida.
  • Los datos de formularios se almacenarán localmente, cuando no haya conexión a Internet

No puedo usar el almacenamiento web debido a las limitaciones de cuotas: estoy comparando SQLite y la SQLite datos indexada .

  • SQLite parece ser el mejor ajuste, pero está en desuso
  • La base de datos indexada es una buena alternativa, pero no es compatible con Safari : se supone que una aplicación híbrida debe ejecutarse en el iPad y en un dispositivo Android en el futuro.

Estoy confundido en la selección de API. ¿Hay alguna otra alternativa a SQLite o soporte de la base de datos indexada esperada en Safari?


Como han señalado otros, desde que se hizo esta pregunta, webSQL ha quedado en desuso , mientras que las implementaciones de IndexedDB ahora existen en todos los principales proveedores de navegadores .

Entonces, para cualquier persona que pueda encontrarse aquí enfrentada con la misma decisión que tomar, vaya con IndexedDB.

Otros aquí también han implicado, correctamente, que no es necesario hacer una elección entre los dos tipos de bases de datos. Uno puede simplemente elegir (o hacer) una biblioteca que utilice la base de datos disponible en la máquina cliente.

Echa un vistazo a BakedGoods si estás buscando una biblioteca de este tipo. Establece una interfaz uniforme que se puede utilizar para realizar operaciones de almacenamiento en todas las instalaciones de almacenamiento de clientes nativos y no nativos. También mantiene la flexibilidad y las opciones ofrecidas al usuario por cada uno.

Con ello, realizar operaciones de almacenamiento en cualquiera de los tipos de base de datos admitidos es una cuestión de ...

... especificando las opciones de operación apropiadas y las configuraciones equivalentes para ambos tipos de base de datos:

//If the operation is a set(), and the referenced structures //don''t exist, they will be created automatically. var webSQLOptionsObj = { databaseName: "Example_DB", databaseDisplayName: "Example DB", databaseVersion: "", estimatedDatabaseSize: 1024 * 1024, tableData: { name: "Main", keyColumnName: "lastName", columnDefinitions: "(lastName TEXT PRIMARY KEY, firstName TEXT)" }, tableIndexDataArray: [name: "First_Name_Index", columnNames: "(firstName)"] }; var indexedDBOptionsObj = { databaseName: "Example_DB", databaseVersion: 1, objectStoreData: { name: "Main", keyPath: lastName, autoIncrement: false }, objectStoreIndexDataArray: [ {name: "First_Name_Index", keyPath: "firstName", unique: false, multiEntry: false} ], }; var optionsObj = { conductDisjointly: false, webSQL: webSQLOptionsObj, indexedDB: indexedDBOptionsObj };

... y realizando la operación:

bakedGoods.set({ data: [ {value: {lastName: "Obama", firstName: "Barack"}}, {value: {lastName: "Biden", firstName: "Joe"}} ], storageTypes: ["indexedDB", "webSQL"], options: optionsObj, complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){} });

Su interfaz simple y su incomparable soporte de instalaciones de almacenamiento tienen el costo de la falta de soporte para algunas configuraciones específicas de las instalaciones de almacenamiento. Por ejemplo, no admite la conducción de operaciones de almacenamiento en tablas WebSQL con claves primarias de varias columnas.

Por lo tanto, si hace un uso intensivo de esos tipos de características, es posible que desee buscar en otra parte.

Ah, y por el bien de la transparencia total, BakedGoods es mantenido por este tipo aquí :).


Creo que abandonar IndexedDB sería una mala idea, porque es probablemente el formato del futuro, por lo que Safari podría dejar de admitir WebSQL.

Parece que hay varias soluciones de JavaScript para cerrar la brecha entre las dos, guardando lo que esté disponible en el navegador del usuario: Biblioteca de JavaScript para Bridge IndexedDB y WebSQL Creo que esta es probablemente la mejor solución.


En primer lugar, el que ha sido desaprobado por W3C es WebSQL no SQLite

IndexedDB -

  • Es incompatible con muchos tipos de SO móvil y solo es compatible con ciertos tipos de versiones de SO móvil.
  • Los desarrolladores no pueden usar SQL con IndexedDB. Pueden con SQLite y WebSQL.
  • La mayoría de los desarrolladores evitan activamente usar IndexedDB tanto como pueden

WebSQL -

  • Ha sido desaprobado por W3C, lo que significa que ya no se mantiene ni se desarrolla.
  • Requiere otro complemento llamado Polyfill para permitir que las aplicaciones móviles funcionen con el popular sistema operativo móvil, como Google Android y Apple iOS

SQLite -

  • Recibió un premio de Google.
  • SQLite tiene su sitio web oficial. IndexedDB y WebSQL no lo hacen
  • En Google, SQLite devuelve 4,3 millones de resultados. WebSQL devuelve un poco menos de 700K resultados e IndexedDB devuelve 282K resultados.

Si quieres un tutorial rápido en SQLite,

Almacenamiento de base de datos SQLite usando Android y Phonegap


Esto puede llegar tarde al juego, pero puedes mirar: SequelSphere

Es una base de datos relacional 100% HTML5 / JavaScript que funciona en todos los navegadores y utiliza el almacenamiento local para conservar sus datos. Puedes usar SQL para consultarla también. Es su propio motor de base de datos y no se basa en las bases de datos relacionales integradas (WebSQL). Como tal, funcionará en todos los navegadores.

Aunque actualmente solo es compatible con localStorage, la idea es apoyar todos los estándares en el futuro. Como los navegadores admiten otros tipos de persistencia, SequelSphere aprovecharía eso. Lo positivo es que solo se codifica contra SequelSphere utilizando SQL estándar, y deja que maneje la persistencia.

Sin embargo, tenga en cuenta que es un producto nuevo para el mercado, por lo que viene con aspectos positivos y negativos.


Lo más probable es que IndexedDB sea la base de datos compatible del futuro y sería mejor ir con eso en lugar de WebSQL. Como señaló Raymond, es mejor consultar http://www.caniuse.com para ver el soporte actual / futuro en los navegadores de escritorio y móviles.

Dependiendo de las necesidades actuales de su solución, podría estar bien con una de las muchas bibliotecas de JavaScript disponibles que utilizan el almacenamiento local y proporcionan una interfaz de consulta. Una de las bibliotecas, que me ha funcionado bien, es Lawnchair .


Quería hacer una pequeña edición para actualizar esta pregunta, ya que Google nos está dirigiendo a esta pregunta si realiza una investigación sobre el tema de websql, localStorage y indexedDB. La edición fue rechazada, así que estoy publicando como respuesta.

Como otros declararon en sus respuestas, IndexedDB careció un poco antes en soporte y en contenido en la web para su documentación y especificación.

Pero el soporte de IndexedDB se ha mejorado enormemente para dispositivos móviles . Mejoró tanto que el único navegador que no tiene soporte o lo que sea, es Opera Mini, pero solo tiene un 0,34% de uso en el mercado .

A partir de 2015, sugeriría a cualquier desarrollador que se cambie a IndexedDB, ya que WebSQL ha quedado en desuso e IE y Firefox dejaron de admitirlo (¡eso es más del 15% del uso del mercado solo para ellos!) Y SQLite está perdiendo espacio rápidamente ante IndexedDB, que Ahora tienen muy buenas fuentes de documentación , many . Algunos oficiales también ! Algunas compañías de TI incluso están motivando el uso también, como IBM .

Lo voy a usar, y hasta ahora no he encontrado ningún problema. Safari le ha agregado soporte, y también a todos los navegadores principales. ¡Ve a por ello!

EDITAR: Un addendum personal: probé IndexedDB. Soy un Senior en mi equipo, y la sintaxis de IndexedDB es demasiado complicada y compleja para pequeños problemas de almacenamiento. Terminé usando localstorage para guardar algunos datos JSON simples y analizarlos cuando los necesito. Mucho mejor para que cualquiera en mi equipo lo obtenga (¡yo también, por supuesto!)


Sí, la API de IndexedDB es excelente y todos los navegadores lo admitirán en un futuro próximo.

Definitivamente recomiendo mi propia solución https://bitbucket.org/ytkyaw/ydn-db es una envoltura muy delgada para IndexedDB y recurro a Sqlite para un safari.


Si no desea elegir entre IndexedDB o WebSQL, puede usar la biblioteca de Javascript PouchDB .

Lo uso en una vista web de Android para almacenar datos fuera de línea y funciona bastante bien. Los datos se almacenan en una base de datos local (utilizando IndexedDB o WebSQL) si no hay conexión a Internet disponible y se sincroniza con una base de datos remota (base de datos CouchDB ) cuando hay una conexión disponible.

PouchDB dependerá de IndexedDB, pero recurrirá a WebSQL si no se admite IndexedDB. También existe la posibilidad de usar un complemento SQLite para Cordova / PhoneGap.