2011-10-17 17 views
13

Tworzę narzędzie do własnego użytku, które wymaga prostej bazy danych. To wydaje się być dobrą okazją do poznania API IndexedDB HTML5, ale ważne jest, aby w żadnym momencie nie utracić danych.Eksportowanie i importowanie danych IndexedDB

Przypuszczam, że utworzenie kopii zapasowej katalogu profilu przeglądarki przydałoby się do utworzenia kopii zapasowej, ale chciałbym również potencjalnie pracować z różnymi komputerami, więc eksportowanie i importowanie bazy danych byłoby miłe. Czy istnieje łatwy sposób na eksportowanie i importowanie baz danych IndexedDB? Rozwiązania specyficzne dla przeglądarki są w porządku.

+1

Jestem trochę zaskoczony, że nie ma opcji dla czegoś takiego w inspektorach internetowych. Inspektor Chrome pozwala zobaczyć bazę danych, ale nie wygląda na to, że możesz z nią współdziałać. – Bart

+0

Przy odrobinie szczęścia Juhana? –

+0

@StevendeSalas Jeszcze nie - Przypuszczam, że jest wystarczająco prawdopodobne, że takie narzędzia jeszcze nie istnieją. – JJJ

Odpowiedz

0

użycie Spróbuj jStorage, obsługuje większość przeglądarek, z wyjątkiem tych, bez localStorage (jak nieaktualnych Safari3)

Doszło wiele funkcji, ale możemy próbować osiągnąć to, co chcesz z tych:

zestaw (klucz, wartość)

$.jStorage.set(key, value) 

Zapisuje wartość do pamięci lokalnej. klucz musi być ciągiem, w przeciwnym wypadku zostanie zgłoszony wyjątek. wartość może być dowolną wartością JSONeable, w tym obiektami i tablicami lub węzłem XML. Obecnie węzły XML nie mogą być zagnieżdżone w innych obiektach: $ .jStorage.set ("xml", xml_node) jest w porządku, ale $ .jStorage.set ("xml", {xml: xml_node}) nie jest.


get (klawisz [domyślnie])

value = $.jStorage.get(key) 
value = $.jStorage.get(key, "default value") 

get pobiera wartość, jeśli klucz istnieje, czy ustawiona jeśli tak nie jest. klucz musi być ciągiem, w przeciwnym wypadku zostanie zgłoszony wyjątek. domyślna może być dowolna wartość.


flush()

$.jStorage.flush() 

Czyści cache.


wskaźnik()

$.jStorage.index() 

zwroty wszystkie klucze obecnie w użyciu, jako matrycy.

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

Mając to na uwadze, zważywszy masz już DB skonfigurować, można użyć var index = $.jStorage.index(); iz tablicy utworzyć jQuery .each (pętla), który otrzymuje każdy klawisz tablicy i połączenia the get() $.jStorage.get(key) i dodać do dużego ciągu, który na końcu może zostać sparsowany jako .csv, a nawet XML lub json (wybierz).

Dzięki tym danym w rękach można wyczyścić $.jStorage.flush().

Następnie, jeśli chcesz zaimportować dane dla nowego DB, wszystko, co musisz zrobić, to .each(), który odczytuje zapisany ciąg/plik i rozpocząć ustawianie par kay/value z $.jStorage.set(key, value).

Jeśli nie masz już bazy danych, po prostu zapełnij nową numerem $.jStorage.set(key, value). :)

+2

To nie odpowiada na pytanie jako takie, ale oferuje rozwiązanie podstawowego problemu, więc +1. – JJJ

+0

Byłoby zabawnie dla osoby, która dzisiaj dodała dzisiaj (2 lata po wysłaniu odpowiedzi), aby powiedzieć, dlaczego została odrzucona. – RaphaelDDL

+3

Rok później pozwól mi odpowiedzieć na twoje pytanie, to było prawdopodobnie z tego samego powodu, dla którego rozważałem downvoting: nie odpowiada na pytanie właśnie Juhana już wspomniano –

1

Możesz to zrobić w WebSQL wpisując trochę kodu JavaScript na rozwiązanie posted here, jednak stracisz szansę na naukę IndexDB.

Jeśli naprawdę chcesz się uczyć IndexDB, być może sam napiszesz narzędzie importu/eksportu, sądzę, że w przyszłości będzie wystarczająca potrzeba.

5

Nic takiego nie jest dostępne w pure IndexedDB spec, jednak możliwe jest napisanie własnych metod, które to wykonają.

Podstawowe kroki, aby importować dane są

  1. otworzyć bazę IndexedDB
  2. utworzyć magazyn obiektu
  3. dodać indeksy
  4. pętli swoimi przedmiotami i dodać je jeden po drugim (za pośrednictwem Operacja add lub put)

Aby wyeksportować magazyn obiektów, można :

  1. otworzyć kursor zera jak po lewej związany i na każdym kleszcza
  2. dodać onsuccess zwrotnego do obiektu żądania, aby uchwycić wartość wiersza
  3. na każdym zwrotnego sukcesu wcisnąć wiersz uprzywilejowanym array var.

Ostatni rząd wyemituje null, który jest stanem, który można obejrzeć, aby dowiedzieć się, kiedy kursor wyczerpał wszystkie swoje zapisy i jest gotowy. W takim przypadku można wywołać wywołanie zwrotne wywołania przechodząc uprzywilejowanej tablicy obiektów reprezentujących kopię zapasową składnicy obiektów.

+3

Z doświadczenia mogę powiedzieć, że odpowiedź redaktora jest jedynym sposobem na zrobienie tego. Ostrzegamy też, że musisz być bardzo sprytny przy wszystkich programach asynchronicznych, jakich wymaga. Polecam mieć obiekt pamięci podręcznej, w którym wszystkie dane zostaną zrzucone. –

+1

Napisałem moduł [indexeddb-export-import] (https://github.com/Polarisation/indexeddb-export-import), który robi to, zasadniczo jak opisano w tej odpowiedzi. –

Powiązane problemy