Экспорт и импорт данных IndexedDB - PullRequest
15 голосов
/ 17 октября 2011

Я создаю инструмент для собственного использования, которому нужна простая база данных. Это хороший шанс изучить API IndexedDB HTML5, но важно, чтобы я ни в коем случае не терял данные.

Я полагаю, что резервное копирование каталога профиля браузера будет полезно для резервного копирования, но я также хотел бы потенциально работать с разными компьютерами, поэтому было бы неплохо экспортировать и импортировать базу данных. Есть ли простой способ экспортировать и импортировать базы данных IndexedDB? Все браузерные решения в порядке.

Ответы [ 3 ]

6 голосов
/ 21 ноября 2011

В спецификации pure IndexedDB нет ничего подобного, однако можно написать свои собственные методы, которые будут выполнять это.

Основные шаги для импорта данных:

  1. открыть базу данных IndexedDB
  2. создать хранилище объектов
  3. добавить индексы
  4. перебирать ваши объекты и добавлять их один за другим (через add или put операция)

Для экспорта хранилища объектов вы можете:

  1. открыть курсор с нулем в качестве левой границы и на каждом тике
  2. добавить onsuccess обратный вызов к объекту запроса, чтобы захватить значение строки
  3. при каждом успешном обратном вызове, переместить строку в привилегированный массив var.

.последняя строка будет выдавать null, это состояние, за которым вы можете наблюдать, чтобы выяснить, когда курсор исчерпал все свои записи и готов.Когда это происходит, вы можете вызвать экспортный обратный вызов, передавая привилегированный массив объектов, представляющих резервную копию вашего хранилища объектов.

2 голосов
/ 28 октября 2011

Вы можете сделать это в WebSQL, написав немного Javascript поверх решения , размещенного здесь , однако вы упустите шанс изучить IndexDB.

Если вы действительно хотитечтобы изучить IndexDB наизнанку, возможно, вы сможете написать инструмент для импорта / экспорта самостоятельно, я считаю, что в будущем он будет достаточно.

0 голосов
/ 26 октября 2011

Попробуйте использовать jStorage , он поддерживает большинство браузеров, кроме браузеров без localStorage (например, устаревший Safari3)

У него много функций, но мы можем попытаться добиться того, что вы хотите с этими:

set (ключ, значение)

$.jStorage.set(key, value)

Сохраняет значение в локальном хранилище.ключ должен быть строкой, в противном случае выдается исключение.значение может быть любым значением JSONeable, включая объекты и массивы или узел XML.В настоящее время узлы XML не могут быть вложены в другие объекты: $ .jStorage.set ("xml", xml_node) - это нормально, а $ .jStorage.set ("xml", {xml: xml_node}) - нет.


get (ключ [, по умолчанию])

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

get возвращает значение, если ключ существует, или значение по умолчанию, если его нет.ключ должен быть строкой, в противном случае выдается исключение.по умолчанию может быть любое значение.


flush ()

$.jStorage.flush()

Очищает кэш.


index()

$.jStorage.index()

Возвращает все ключи, используемые в настоящее время в качестве массива.

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

Учитывая это, учитывая, что у вас уже настроена БД, вы можете использовать var index = $.jStorage.index(); и с массивом создать цикл jQuery .each (), который получает каждый ключ массива и вызывает get () $.jStorage.get(key) и добавляет к большой строке, которую в конце можно проанализироватькак .csv, или даже XML или json (вы выбираете).

Имея эти данные в руках, вы можете $.jStorage.flush() очистить.

Затем, если вы хотите импортировать данные дляНовая БД, все, что вам нужно сделать, это .each (), который читает строку / файл, который вы сохранили, и начинает устанавливать значение kay / value с помощью $.jStorage.set(key, value).

Если у вас нетБД уже есть, просто заполните новую $.jStorage.set(key, value).:)

...