2011-10-17 87 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),它基本上按照這個答案中的描述。 –