2011-10-17 172 views
13

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

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

+1

我有点惊讶,没有任何类似的网页检查器的选项。 Chrome的检查器可以让你看到数据库,但是看起来你并没有太多的互动。 – Bart

+0

Juhana有幸运吗? –

+0

@StevendeSalas尚未 - 我想这可能是新的,这样的工具还不存在。 – JJJ

回答

0

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

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

集(key,value)

$.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检索值。键需要字符串,否则引发异常。默认值可以是任何值。


平齐()

$.jStorage.flush() 

清除高速缓存。


指数()

$.jStorage.index() 

返回所有键当前用作阵列。

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

考虑到这一点,考虑到你已经有一个数据库设置,您可以使用var index = $.jStorage.index();并与阵列,创建一个jQuery。每()循环得到阵列和呼叫的每个关键get()$.jStorage.get(key)并添加到一个大字符串中,最后可以解析为.csv,甚至XML或json(您可以选择)。

有了这些数据,你可以通过$.jStorage.flush()来清除。然后,如果您想要导入新数据库的数据,您只需要一个.each()读取已保存的字符串/文件并开始设置与$.jStorage.set(key, value)的kay/value par。

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

+2

这并不回答问题本身,但提供了一个解决方案的基本问题,所以+1。 – JJJ

+0

对于今天(回答发布后2年)添加-1来说明为什么downvoted的人会很有趣。 – RaphaelDDL

+3

1年后,让我回答你的问题,这可能是出于同样的原因,我认为downvoting:它不回答刚才Juhana已经提到的问题 –

1

您可以在WebSQL中写一点Javascript在解决方案posted here的顶部,但是您将错失学习IndexDB的机会。

如果你真的想学习IndexDB,也许你可以自己编写导入/导出工具,我估计未来会有足够的需求。

5

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

的基本步骤来导入数据到

  1. 打开一个IndexedDB的数据库
  2. 创建一个对象存储
  3. 遍历你的对象添加索引,并通过一个将它们添加一个(通过addput操作)

对于导出对象存储区,您可以:

  1. 开辟一个光标与零作为结合的左侧和在每个刻度
  2. 添加onsuccess回调请求对象来捕获行值
  3. 每个成功回调行推到特权数组var

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

+3

根据经验,我可以说编辑的回应是唯一的方法。另外需要警告的是,您必须非常聪明地使用所需的所有异步编程。我建议有一个缓存对象,所有的数据都被转储。 –

+1

我已经写了一个模块[indexeddb-export-import](https://github.com/Polarisation/indexeddb-export-import),它基本上按照这个答案中的描述。 –