gpt4 book ai didi

javascript - 如何在 indexedDB 上创建列/对象

转载 作者:行者123 更新时间:2023-11-30 17:09:24 26 4
gpt4 key购买 nike

我对 indexedDB 很陌生,并开始创建一个数据库来传输 WebSQL。

我想知道的是如何在 indexedDB 中创建字段。

例如:

tx.executeSql("CREATE TABLE IF NOT EXISTS TEMPRESULTENTRIES ( "
+ " id INTEGER PRIMARY KEY AUTOINCREMENT, "
+ " instid INTEGER NOT NULL REFERENCES institutions(id) ON DELETE CASCADE, "
+ " qid INTEGER NOT NULL REFERENCES questionnaires(id) ON DELETE CASCADE, "
+ " result TEXT NOT NULL )");

我将如何在 indexedDB 中创建相同的表。我对 indexedDB 的这一部分感到困惑。目前我只创建了 id 的键路径:

db.createObjectStore("TEMPRESULTENTRIES", {keypath: "id", autoIncrement: true});

我想知道如何添加或何时创建其他字段?

从一个小测试用例中,我可以看到当我填充表/存储时,我可以在存储中创建列/对象,如:

store.put({ObjectName: Value});

这是在商店中创建对象的正确方法吗?

最好的,阿姆瑞

最佳答案

IndexedDB 是面向对象的数据库,而不是关系数据库。与 SQL 表最接近的模拟是对象存储,使用 IDBDatabase.createObjectStore 创建。对象存储没有固定的架构,因此调用 IDBObjectStore.put 可以接受具有任何字段的对象,只要该对象具有 keyPath 字段或 keyPath 通过设置 {autoIncrement: true} 成为可选的。默认情况下,您只能使用 keyPath 查询文档。要使用其他字段查询文档,必须使用 IDBObjectStore.createIndex

创建索引

这是一个使用数字或姓名前缀查找联系人的应用程序的摘录。

dbReq.onupgradeneeded = function (event) {
var db = event.target.result,
objectStore = db.createObjectStore('calls', {keyPath: 'timestamp'}),
contactStore = db.createObjectStore('contacts', {autoIncrement: true});

objectStore.createIndex('number', 'number', {unique: false});
contactStore.createIndex('number', 'number');
contactStore.createIndex('name', 'name', {unique: false});
objectStore.createIndex('timestamp', 'timestamp', {unique: true});
};

按前缀查找:

findPrefix: function(prefix, fn) {
var transaction = this.db.transaction(['contacts', 'calls']),
contactStore = transaction.objectStore('contacts'),
callStore = transaction.objectStore('calls'),
numberIndex = callStore.index('number'),
nameIndex = contactStore.index('name'),
key = IDBKeyRange.bound(prefix, prefix + '\uffff'),
times = 0,
result = [],
consume = function(records) {
result = result.concat(records);
if (++times === 2) {
/* Remove duplicate numbers: names and numbers may have the same value*/
var numbers = {};
result = result.filter(function(contact) {
if (!numbers[contact.number]) {
return (numbers[contact.number] = true);
}
return false;
});
fn(result);
}
};

this.consumeCursor(numberIndex.openCursor(key, 'nextunique'), consume);
this.consumeCursor(nameIndex.openCursor(key), consume);
}

More on IndexedDB

关于javascript - 如何在 indexedDB 上创建列/对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27314334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com