2017-01-09 42 views
0

以下工作代码用于设置我的问题:更新在IndexedDB的单场

myRequest = indexedDB.deleteDatabase('myDatabase') 
 
myRequest.onsuccess \t = function() { 
 
\t var myRequest 
 
\t 
 
\t myRequest = indexedDB.open('myDatabase') 
 
\t myRequest.onupgradeneeded = function(response) { 
 
\t \t var myDatabase 
 
\t \t \t ,myObjectStore 
 
\t \t 
 
\t \t myDatabase = response.target.result 
 
\t \t myObjectStore = myDatabase.createObjectStore('myData',{autoIncrement:true}) 
 
\t } 
 
\t myRequest.onerror = function(response) { 
 
\t \t debugger 
 
\t } 
 
\t myRequest.onsuccess = function(response) { 
 
\t \t var myTransaction 
 
\t \t \t ,myObjectStore 
 
\t \t \t ,myRequest 
 
\t \t \t ,obj = {} 
 
\t \t window.myDatabase = response.target.result 
 
\t \t myTransaction = myDatabase.transaction(['myData'],'readwrite') 
 
\t \t myObjectStore = myTransaction.objectStore('myData') 
 
\t \t obj.field1 = 'a' 
 
\t \t obj.field2 = 'b' 
 
\t \t myObjectStore.add(obj) 
 
\t } 
 
}

问:我怎么说相当于:

update myData set field2='c' where key=1 

我是否必须在.put语句中提供field1和field2?

回答

2

是的,你必须把完整的对象,例如

myObjectStore.get(1).onsuccess = function(e) { 
    var obj = e.target.result; 
    obj.field2 = 'c'; 
    myObjectStore.put(obj, 1); 
}; 
+0

谢谢约书亚。你的回答真的帮了我。我注意到的一件事是,在put语句中不需要主键,因为它在get结果中提供。 –

+0

如果你把()没有一个键,而商店有autoIncrement设置,你会得到一个新的记录,不会覆盖以前的记录....除非你使用内嵌键(即对象存储有keyPath指定,你的例子中没有。) –