我一直在看JsStore,现在正在玩几个小时的入门教程。我正在使用网站外的“教师”数据库,并希望插入一些数据。
var Value = [{TeacherName: "MR. BAUER", Description: "Lane's Teacher"}, {TeacherName: "MRS. BAUMAN", Description: "Lane's Aide"}, {TeacherName: "MRS. STEWART", Description: "Annabelle's Teacher"}, {TeacherName: "MR. GARLAND", Description: "Alex's Teacher"}];
Connection.insert({
Into: "Teachers",
Values: Value ,//you can insert multiple values at a time
OnSuccess:function (rowsAffected){
if (rowsAffected > 0)
{
alert('Successfully Added');
}
},
OnError:function (error) {
alert(error.value);
}
});
这很有效。接下来我转到'bulkInsert',文档看起来很简单,就是将'insert'更改为'bulkInsert'
我清除了缓存并再次运行该页面,并收到此错误:
DOMException:无法在'IDBObjectStore'上执行'add':评估 对象存储库的关键路径没有产生值。
这是唯一的变化,我看不出我错过的问题。对于未在文档中列出的bulkInsert有一个额外的步骤吗?
问题的视频示例:https://youtu.be/d-Jxx54c3dw
答案 0 :(得分:1)
在您的视频中,看起来关键路径是TeacherId,但在您的Values数组中,没有任何对象具有该属性。也许这就是问题所在。或者你错误地禁用了autoIncrment。请参阅the Structuring the Database section。
答案 1 :(得分:0)
如jsstore(http://jsstore.net/tutorial/bulk-insert) -
的文档中所述与插入api相比,它要快得多,因为它不会检查和 返回任何东西
这意味着所有列选项,如自动增量,默认等都不会起作用。此外,它不能确保所有数据都已插入。
您收到的错误说明 - 您没有为主键提供任何值。这是因为您为主键指定了AutoIncrement,但在使用bulkInsert时不会计算AutoIncrement。
现在您的问题是为什么要使用批量插入?
批量插入的使用是 - 一次插入大量数据。
例如 - 您在服务器或Excel工作表或json文件中有数千个数据,并且您希望非常快速地将这些数据插入indexeddb,而无需检查或修改任何数据。
希望这对你的问题有足够的解释。