2011-10-17 165 views
13

Estoy haciendo una herramienta para mi propio uso que necesita una base de datos simple. Esto parece una buena oportunidad para aprender la API HTML5 IndexedDB, pero es importante que no pierda datos en ningún momento.Exportación e importación de datos de IndexedDB

Supongo que la copia de seguridad del directorio del perfil del navegador serviría para una copia de seguridad, pero también me gustaría potencialmente trabajar con diferentes computadoras, por lo que exportar e importar la base de datos sería bueno. ¿Hay alguna manera fácil de exportar e importar bases de datos IndexedDB? Las soluciones específicas del navegador están bien.

+1

Estoy un poco sorprendido de que no haya opciones para algo así en los inspectores web. El inspector de Chrome le permite ver la base de datos, pero no parece que pueda interactuar mucho con ella. – Bart

+0

¿Hay suerte, Juhana? –

+0

@StevendeSalas Todavía no - Supongo que es probable que sea lo suficientemente nuevo como para que herramientas como esta no existan todavía. – JJJ

Respuesta

0

uso Try jStorage, es compatible con la mayoría de navegadores, excepto los que no tienen localStorage (como Safari3 desuso)

Es ya ha recibido una gran cantidad de funciones, pero podemos tratar de lograr lo que quiere con los:

conjunto (clave, valor)

$.jStorage.set(key, value) 

ahorra un valor al almacenamiento local. la clave debe ser una cadena; de lo contrario, se lanza una excepción. valor puede ser cualquier valor JSONeable, incluidos objetos y matrices o un nodo XML. Actualmente, los nodos XML no se pueden anidar dentro de otros objetos: $ .jStorage.set ("xml", xml_node) está bien, pero $ .jStorage.set ("xml", {xml: xml_node}) no lo está.


get (tecla [, por defecto])

value = $.jStorage.get(key) 
value = $.jStorage.get(key, "default value") 

get recupera el valor si la clave existe, o por defecto si no lo hace. la clave debe ser una cadena; de lo contrario, se lanza una excepción. el valor predeterminado puede ser cualquier valor.


ras()

$.jStorage.flush() 

Borra la memoria caché.

índice

()

$.jStorage.index() 

Devuelve todas las claves que se utilizan actualmente como una matriz.

var index = $.jStorage.index(); 
console.log(index); // ["key1","key2","key3"] 

Con esto en mente, teniendo en cuenta que ya tiene una base de datos creada, puede utilizar var index = $.jStorage.index(); y con la matriz, crear un bucle jQuery each() que recibe cada tecla de la matriz y de llamada el get() $.jStorage.get(key) y añádelo a una cadena grande, que al final se puede analizar como .csv, o incluso XML o json (eliges).

Con estos datos en las manos, puede $.jStorage.flush() borrar.

Luego, si desea importar los datos para una nueva base de datos, todo lo que necesita hacer es un .each() que lea la cadena/archivo que ha guardado y comience a establecer el valor kay/par con $.jStorage.set(key, value).

Si aún no tiene una base de datos, complete una nueva con $.jStorage.set(key, value). :)

+2

Esto no responde la pregunta en sí, pero ofrece una solución al problema subyacente, por lo que +1. – JJJ

+0

Sería divertido para la persona que agregó -1 hoy (2 años después de que se publicó la respuesta) para decir por qué downvoted. – RaphaelDDL

+3

1 año después déjame responder tu pregunta, probablemente fue por la misma razón que consideré la votación negativa: no responde a la pregunta solo Juhana ya mencionó –

1

Puede hacerlo en WebSQL escribiendo un poco de Javascript en la parte superior de una solución posted here, sin embargo, perderá la oportunidad de aprender IndexDB.

Si realmente quiere aprender IndexDB al revés, tal vez pueda escribir la herramienta de importación/exportación usted mismo, creo que habrá suficiente necesidad de una en el futuro.

5

No hay nada como esto disponible en el pure IndexedDB spec, sin embargo, es posible escribir sus propios métodos para lograr esto.

Los pasos básicos para importar los datos son a

  1. abrir una base de datos indexada
  2. crear un almacén de objetos
  3. añadir índices
  4. bucle a través de sus objetos y añadirlos uno a uno (a través de una add o put operación)

Para exportar un almacén de objetos, puede :

  1. abrir un cursor con cero como límite izquierdo y en cada garrapata
  2. añadir una devolución de llamada onsuccess al objeto solicitud para capturar el valor de la fila
  3. en cada devolución de llamada éxito empujar la fila a una privilegiada matriz var.

La última fila emitirá null, que es un estado en el que puede ver de forma de averiguar si el cursor ha agotado todos sus registros y está hecho. Cuando eso sucede, puede llamar a una devolución de llamada de exportación pasando la matriz de objetos privilegiados que representan una copia de seguridad de su almacén de objetos.

+3

Por experiencia, puedo decir que la respuesta del editor es la única forma de hacerlo. También ten cuidado, tienes que ser muy inteligente con toda la programación asíncrona que requiere. Recomiendo tener un objeto de caché donde se arrojen todos los datos. –

+1

He escrito un módulo [indexeddb-export-import] (https://github.com/Polarisation/indexeddb-export-import) que hace esto, básicamente como se describe en esta respuesta. –

Cuestiones relacionadas