Подтвердить что ты не робот

Экспорт и импорт данных IndexedDB

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

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

4b9b3361

Ответ 1

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

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

  • открыть базу данных IndexedDB
  • создать хранилище объектов
  • добавить индексы
  • прокрутите объекты и добавьте их один за другим (через операцию add или put)

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

  • откройте курсор с нулем в левой части и при каждом тике
  • добавить обратный вызов onsuccess к объекту запроса для захвата значения строки
  • при каждом обратном вызове успеха нажмите строку в привилегированный массив var.

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

Ответ 2

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

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

Ответ 3

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

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

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

$.jStorage.set(key, value)

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


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

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

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


заподлицо()

$.jStorage.flush()

Очищает кеш.


индекс()

$.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). :)