2012-08-23 3 views
0

업그레이드 이벤트 중에 IndexedDB로 전달되는 JSON 데이터 집합을 만들었습니다. 그것은 겉으로보기에는 문제가없는 아주 멋진 IndexedDB 데이터베이스를 생성합니다. 문제는 데이터베이스를 버전 1에서 2로 업그레이드 할 때 JSON을 반복하고 적용하기 때문에 모든 기존 데이터를 덮어 씁니다.업그레이드 도중 IndexedDB가 값을 덮어 씁니다.

고유 키가없는 새 데이터베이스 항목이 아무 것도 쓰지 못하게하려면 업그레이드하는 방법이 있어야합니다. 어떻게하면 좋을까요? 다음은 현재 데이터를 덮어 쓰는 것입니다.

objectStore = event.currentTarget.transaction.objectStore('player'); 
objectStore.put({ key: 'non unique, but I replace my twin\'s data anyway', data: value }); 

감사합니다. 사전에 도움을 주셔서 감사 드리며 모든 문제를 해결할 수 없습니다. 2012년 8월 24일

편집 정보를 확인할 수 사용의 크리스토프의 권고에 따라, 나는 파고 및 연구의 조금을했다. 대답을 찾은 후에 당신을 도울 수있는 가짜 코드를 작성하기로 결정했습니다.

// Create the get request inside your upgrade 
var tableData = event.currentTarget.transaction.objectStore('your table name'); 
var getData = tableStore.get('your key'); 

// Run the get request 
getData.onsuccess = function (e) { 
    var result = e.target.result; 

    // Immediately exit if the current result is not undefined 
    if (result !== undefined) { 
     return; 
    } 

    // Note, you may or may not need a closure to write data in the callback 
    // See here for more info on closures in events http://stackoverflow.com/questions/3495679/passing-parameters-in-javascript-onclick-event#answer-3495722 
    tableStore.add('data to add'); 
}; 

답변

2

데이터 덮어 쓰기는 데이터베이스에 이미있는 키를 찾은 경우에만 발생할 수 있습니다. 키를 찾지 못하면 방금 추가됩니다. 이 데이터는 두 번째 또는 업데이트에 삽입됩니다 것을 방지하려면

몇 가지 해결책이 있습니다 : 어떤 재치가 키가 있는지

  • 을 (get 메소드) 경우

    데이터를 퍼팅,
    • 확인하기 전에 put 대신에 add 메소드를 사용하십시오. (키가 이미 존재하면 오류가 발생합니다.) 매우 좋지 않음
    • 데이터베이스의 이전 버전이 0인지 또는 아무 것도 없는지 확인한 다음 삽입 만 실행하십시오.
  • +0

    get을 제외한 모든 옵션을 시도했습니다. 그래서 나는 get.success = '이것을 쓰지 마라'; get.error = '이것을 써라'; 나는 그것이 벌써 존재하지 않는다면 그것은 불쾌한 오류를 일으킬 것이라고 추측하고있다. –

    +0

    다음과 같이하십시오. get.success = function (e) {if (! get.result) {// insert}}. 이것은 효과가있다. 마지막 옵션을 선호합니다. 가능한 버전의 DB도 가능합니다 ... –

    +0

    데이터베이스와 0 또는 아무것도 체크하지 않으면 한 번만 업그레이드 할 수 있습니다. 가능하면 여러 버전을 업그레이드 할 수 있어야합니다. 사용하기에 스윙을 취하기 위해가는 것이 이번 주말에 열쇠가 있는지 확인하십시오. –

    관련 문제