Javascript ConstraintError:对象存储中已存在密钥
我正在使用React 16.3.2、Redux 4和Dexie 2.0.3 当我第二次存储数据时,它会抛出此错误消息 错误:Javascript ConstraintError:对象存储中已存在密钥,javascript,redux,indexeddb,dexie,Javascript,Redux,Indexeddb,Dexie,我正在使用React 16.3.2、Redux 4和Dexie 2.0.3 当我第二次存储数据时,它会抛出此错误消息 错误:约束错误:对象存储中已存在密钥。 return dispatch => { db.table .add(data) .then (function(id){ console.log(id) }) .catch (function (error) {
约束错误:对象存储中已存在密钥。
return dispatch => {
db.table
.add(data)
.then (function(id){
console.log(id)
})
.catch (function (error) {
console.log("Error: " + error);
});
}
我的数据库模式:
const db = new Dexie('ReactReduxDexieJsCRUD');
db.version(1).stores({table:'++id,name,age,bloodGroup,donateBefore,weight' });
第一次很好地存储日期,但在它给出错误之后 您的模式是什么样子的?(部件db.version(x).stores({…}) 最常见的是具有入站主键,例如:
db.version(1).stores({
table: 'id, idx1, idx2...'
});
此处id
是主键
将添加id为1的对象db.table.add({id:1,foo:'bar'})
2次将失败,因为id 1存在db.table.add({id:1,foo:'bar2'})
将用id 1更新对象db.table.put({id:1,foo:'bar2'})
db.version(2).stores({
table: '++id, idx1, idx2...'
});
那么您就不需要在add()的调用中提供id:
将添加id为1的对象db.table.add({foo:'bar'})
2次将添加id为2的新objdb.table.add({foo:'barX'})
put(data)
而不是add(data)
。我没有使用Dexie,但MySql上的类似问题可以通过“在重复密钥更新时”解决。如果要在第二次调用时将新数据添加为新记录,则需要将表键设置为自动递增,或手动将新键指定为add
call的第二个参数。如果要添加数据或更新数据(如果存在),请尝试[而不是添加。可爱的注释#Oblosysstolex但它会产生另一个问题它不会更改ID,它的工作原理类似于#数据库中的更新如预期的那样工作,但您不希望更新,那么当使用重复密钥时,您实际希望发生什么情况?@smith我不想使用重复密钥。为什么它会给我错误duplicate密钥。我从第二次提交时就使用了新值,所以应该使用新ID存储新数据?谢谢,#David,这是我需要的完美答案。