You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IndexedDB数据库已创建但对象存储空间未生成问题求助

解决IndexedDB对象存储空间未创建的问题

问题分析

你的代码存在两个核心问题导致对象存储空间不显示:

  1. 名称不匹配:代码中创建的对象存储空间是"nombres",但你在控制台查找的是"names",两者名称不一致,自然找不到目标存储空间。
  2. 版本号未触发升级逻辑:upgradeneeded事件仅在数据库版本号高于本地已存在的版本时才会执行。如果之前已经打开过版本1的MyDatabase,即使之前没创建对象存储空间,现有版本号不变的话,升级逻辑不会重新执行。

解决步骤

1. 统一对象存储空间名称

根据需求修改代码中的名称,确保和你要查找的一致:

  • 如果需要names,将db.createObjectStore("nombres", ...)改为db.createObjectStore("names", ...)
  • 如果确认要nombres,则在浏览器控制台中查找这个名称的存储空间。

2. 触发升级逻辑(二选一)

方法一:删除现有数据库

打开浏览器开发者工具的「Application」面板,找到IndexedDB下的MyDatabase,右键删除后重新运行代码。

方法二:升级数据库版本号

将indexedDB.open("MyDatabase", 1)中的版本号改为更高的数字(比如2),强制触发upgradeneeded事件:

const IDBRequest = indexedDB.open("MyDatabase", 2);

IDBRequest.addEventListener("upgradeneeded", (event) => {
    const db = event.target.result;
    // 先检查存储空间是否已存在,避免重复创建报错
    if (!db.objectStoreNames.contains("names")) {
        db.createObjectStore("names", {
            autoIncrement: true
        });
    }
}); 

IDBRequest.addEventListener("success", () => {
    console.log("数据库打开成功");
});

IDBRequest.addEventListener("error", (event) => {
    console.log("打开数据库出错:", event.target.error);
});

额外优化点

  • 使用event.target.result获取数据库实例,比直接访问IDBRequest.result更可靠,符合IndexedDB事件回调的标准用法。
  • 添加db.objectStoreNames.contains检查,避免重复创建对象存储空间导致的错误。

内容的提问来源于stack exchange,提问作者Jhoni bravo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 01:13:13