19

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

我想备份浏览器的配置文件目录可以作为备份,但我也想可能与不同的计算机一起工作,所以导出和导入数据库会很好。有没有一种简单的方法来导出和导入 IndexedDB 数据库?特定于浏览器的解决方案是可以的。

4

3 回答 3

9

纯 IndexedDB 规范中没有类似的可用方法,但是,可以编写自己的方法来完成此操作。

导入数据的基本步骤是

  1. 打开 IndexedDB 数据库
  2. 创建对象存储
  3. 添加索引
  4. 循环遍历您的对象并一一添加它们(通过addorput操作)

要导出对象存储,您可以:

  1. 在每个刻度上打开一个以零为左边界的光标
  2. 向请求对象添加onsuccess回调以捕获行值
  3. 在每个成功回调中,将行推送到特权数组var

最后一行将发出null,这是一种您可以观察的状态,以确定游标何时用尽其所有记录并完成。发生这种情况时,您可以调用导出回调,传递代表对象存储备份的特权对象数组。

于 2011-11-20T22:55:04.540 回答
2

您可以在 WebSQL 中在此处发布的解决方案之上编写一些 Javascript 来做到这一点,但是您将错过学习 IndexDB 的机会。

如果你真的想从内到外学习 IndexDB,也许你可以自己编写导入/导出工具,我认为将来会有足够的需求。

于 2011-10-28T14:49:42.353 回答
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")

get 如果键存在则检索值,如果不存在则返回默认值。key 必须是字符串,否则会引发异常。默认值可以是任何值。


冲洗()

$.jStorage.flush()

清除缓存。


指数()

$.jStorage.index()

以数组形式返回当前使用的所有键。

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

考虑到这一点,考虑到您已经设置了一个数据库,您可以使用var index = $.jStorage.index();and 与数组一起创建一个 jQuery .each() 循环,该循环获取数组的每个键并调用 get()$.jStorage.get(key)并添加到一个大字符串中,最后可以解析为 .csv,甚至是 XML 或 json(您选择)。

有了这些数据在手,你就可以$.jStorage.flush()清零了。

然后,如果你想为一个新的数据库导入数据,你需要做的就是一个 .each() 读取你保存的字符串/文件并开始设置 kay/value par with $.jStorage.set(key, value)

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

于 2011-10-26T18:20:11.267 回答