Экспорт и импорт данных IndexedDB
Я делаю инструмент для собственного использования, которому нужна простая база данных. Это похоже на хороший шанс изучить HTML5 IndexedDB API, но важно, чтобы я не терял данные в любой момент.
Я предполагаю, что резервное копирование каталога профиля обозревателя сделает для резервного копирования, но я также хотел бы потенциально работать с разными компьютерами, поэтому было бы неплохо экспортировать и импортировать базу данных. Есть ли простой способ экспортировать и импортировать базы данных IndexedDB? Решения, зависящие от браузера, в порядке.
Ответы
Ответ 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)
.
:)