导出和导入IndexedDB数据

时间:2011-10-17 18:44:31

标签: javascript html5 indexeddb

我正在制作一个供我自己使用的工具,需要一个简单的数据库。这似乎是学习HTML5 IndexedDB API的好机会,但重要的是我不要在任何时候丢失数据。

我认为备份浏览器的配置文件目录可以进行备份,但我也希望可以使用不同的计算机,因此导出和导入数据库会很好。有没有一种简单的方法来导出和导入IndexedDB数据库?浏览器特定的解决方案是可以的。

3 个答案:

答案 0 :(得分:6)

pure IndexedDB spec中没有这样的内容,但是,可以编写自己的方法来完成此任务。

导入数据的基本步骤是

  1. 打开IndexedDB数据库
  2. 创建对象库
  3. 添加索引
  4. 循环浏览您的对象并逐个添加(通过addput操作)
  5. 要导出对象库,您可以:

    1. 打开一个光标,其左边为零,每个刻度
    2. 向请求对象添加onsuccess回调以捕获行值
    3. 在每个成功回调上将行推送到特权数组var
    4. 最后一行将发出null,这是一个你可以观察的状态,以便找出光标已用完所有记录并完成的时间。发生这种情况时,您可以调用导出回调,传递表示对象存储备份的特权对象数组。

答案 1 :(得分:2)

你可以在WebSQL中在解决方案posted here之上编写一些Javascript,但是你将错过学习IndexDB的机会。

如果您真的想从里面学习IndexDB,也许您可​​以自己编写导入/导出工具,我估计将来有足够的需求。

答案 2 :(得分:0)

尝试使用jStorage,它支持大多数浏览器,但没有localStorage的浏览器(如已弃用的Safari3)

它有很多功能,但我们可以尝试用它们实现你想要的东西:

设置(键,值)

$.jStorage.set(key, value)

将值保存到本地存储。 key必须是字符串否则抛出异常。 value可以是任何JSONeable值,包括对象和数组或XML节点。 目前,XML节点不能嵌套在其他对象中:$ .jStorage.set(“xml”,xml_node)可以,但$ .jStorage.set(“xml”,{xml:xml_node})不是。


获取(键[,默认])

value = $.jStorage.get(key)
value = $.jStorage.get(key, "default value")
如果密钥存在,则

获取值,如果密钥不存在则返回默认值。 key必须是字符串否则抛出异常。默认值可以是任何值。


<强>齐平()

$.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与{{1 }}

如果您还没有数据库,只需使用$.jStorage.set(key, value)填充新数据库。 :)