新闻中心

j*ascript怎样操作数据库?_j*ascript的IndexedDB如何使用?

2025-12-15
浏览次数:
返回列表
IndexedDB 是浏览器内置的异步、事务型客户端数据库,通过对象存储组织数据,支持索引、多种数据类型及版本控制;需用 open() 初始化并处理 onupgradeneeded 创建存储,所有增删改查操作必须在事务中进行。

javascript怎样操作数据库?_javascript的indexeddb如何使用?

J*aScript 本身不能直接操作服务端数据库(比如 MySQL、PostgreSQL),它运行在浏览器中,没有权限直连服务器数据库。但浏览器提供了 IndexedDB —— 一个内置的、异步的、支持事务的客户端数据库,适合存储大量结构化数据(如对象、文件、二进制数据)。

IndexedDB 是什么?

IndexedDB 是一种低级 API,不是 SQL 数据库,不支持 SQL 查询语句,而是通过对象存储(Object Store)来组织数据。它支持索引、事务、键值对存取,适合离线应用、缓存、大表单暂存等场景。

关键特点:

  • 异步操作,不会阻塞主线程
  • 支持事务(readwrite、readonly)保障数据一致性
  • 可存储 JS 对象、ArrayBuffer、Blob、File 等原生类型
  • 有版本控制机制,升级数据库结构需用 onupgradeneeded

如何打开并初始化 IndexedDB?

使用 window.indexedDB.open() 打开数据库,首次打开会触发 onupgradeneeded 创建对象存储。

示例:创建名为 myAppDB、版本为 1 的数据库,并添加一个叫 users 的对象存储:

const request = indexedDB.open('myAppDB', 1);

request.onerror = () => console.error('打开失败', request.error);
request.onsuccess = () => {
  const db = request.result;
  console.log('数据库已就绪', db);
};

request.onupgradeneeded = (event) => {
  const db = event.target.result;
  // 创建对象存储(类似一张表),主键为 'id'
  if (!db.objectStoreNames.contains('users')) {
    const store = db.createObjectStore('users', { keyPath: 'id' });
    // 可选:为 name 字段建立索引,方便按姓名查询
    store.createIndex('byName', 'name', { unique: false });
  }
};

怎样增删改查数据?

所有操作必须在事务中进行。先获取事务和对象存储,再调用对应方法。

ShopEx助理 ShopEx助理

一个类似淘宝助理、ebay助理的客户端程序,用来方便的在本地处理商店数据,并能够在本地商店、网上商店和第三方平台之间实现数据上传下载功能的工具。功能说明如下:1.连接本地商店:您可以使用ShopEx助理连接一个本地安装的商店系统,这样就可以使用助理对本地商店的商品数据进行编辑等操作,并且数据也将存放在本地商店数据库中。默认是选择“本地未安装商店”,本地还未安

ShopEx助理 0 查看详情 ShopEx助理

假设已拿到 db 实例:

  • 添加数据add()(主键冲突会报错)或 put()(覆盖同主键)
  • 读取单条get(id)
  • 按索引查询index.get(value)index.getAll()
  • 遍历全部openCursor()
  • 删除delete(id)

示例:添加一个用户

function addUser(db, user) {
  const tx = db.transaction('users', 'readwrite');
  const store = tx.objectStore('users');
  const req = store.put(user); // user 必须含 id 字段(因 keyPath 是 'id')

  req.onsuccess = () => console.log('用户已保存');
  req.onerror = () => console.error('保存失败', req.error);
}

常见注意事项

IndexedDB 容易踩坑,注意这些点:

  • 所有回调(success/error)里的 this 指向请求对象,推荐用 event.target.result 或箭头函数避免 this 丢失
  • 事务生命周期很短,必须在事件回调里完成操作,否则事务自动关闭
  • 不能跨域访问(同源策略限制),localhost 和 127.0.0.1 被视为不同源
  • 存储空间有限(通常几十 MB 到几百 MB,取决于浏览器和设备),不适合存超大文件
  • 调试可用 Chrome DevTools → Application → IndexedDB 查看内容

基本上就这些。IndexedDB 不复杂但容易忽略事务和版本逻辑,写几个封装函数(如 dbPromise + async/await 包装)能大幅提升开发体验。

以上就是j*ascript怎样操作数据库?_j*ascript的IndexedDB如何使用?的详细内容,更多请关注其它相关文章!


# 需用  # 全网推广营销哪里好做  # 午夜三级网站建设  # 宁河区企业营销推广公司  # 沈阳植保网站建设项目  # 地铁商铺推广营销案例  # 江苏企业网络推广网站  # 济南建设委员会网站  # 富硒鸡蛋推广营销  # 如何创造论文网站推广  # 红人联盟营销推广怎么做  # 是一种  # 连接池  # 几个  # 离线  # mysql  # 回调  # 客户端  # 主键  # 键值  # 如何使用  # 键值对  # 跨域  # win  # ai  # app  # 浏览器  # js  # java  # javascript 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 向日葵客户端怎么进行远程CentOS控制_向日葵客户端远程CentOS控制操作教程  C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用  C++ vector二维数组定义_C++ vector of vector用法  淘宝网网页版登录入口 淘宝官方网页版快捷登录  高德地图家和公司地址在哪设置 高德地图通勤路线设置方法【超详细】  蛙漫安全无毒 官方认证的绿色入口  css滚动动画效果怎么实现_使用Animate.css滚动触发动画类  composer 和 npm/yarn 在管理依赖方面有什么核心思想差异?  葱吃多了会怎样 葱吃多了会伤胃吗  1688商家版怎样分析买家画像精准供货_1688商家版分析买家画像精准供货【供货策略】  利用Bokeh CustomJS动态控制DataTable列可见性  解决移动端滚动问题的overflow属性应用指南  KFC套餐升级怎么获取优惠代码_KFC套餐升级活动与优惠代码获取方法  Python实时数据流中的动态最值查找策略  豆包手机助手发布技术预览版:直接嵌入手机系统!努比亚样机发售  React Router 嵌套组件中 URL 重定向问题的解决方案  Django通过AJAX异步上传图片并保存至模型的完整指南  CKEditor 5 自定义构建在React应用中渲染失败的调试与解决  mysql如何设置表访问权限_mysql表访问权限配置  从J*aScript对象中精确提取指定属性的教程  如何在低配置电脑上搭建轻量级J*a环境_占用更小的环境选择技巧  马斯克:Optimus 人形机器人复数形式为 Optimi  win11如何加载ICC颜色配置文件 Win11校色文件安装与显示器色彩管理【指南】  极速漫画官方主页网址 极速漫画漫画在线浏览官网链接  jQuery Mask 插件中实现电话号码固定前导零的教程  魅族17怎样用浏览器译外语网页_iPhone魅族17浏览器译外语网页【即时翻译】  Win11 BitLocker密码忘了怎么办 Win11找回BitLocker恢复密钥方法【解决】  Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区  Python实现多节点属性重叠度分析教程  Fabric Mod开发:在1.19.3+版本中正确添加自定义物品并管理物品组  Kafka Streams中基于消息头条件过滤消息的实现指南  mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析  Centos/Linux 系统下安装 composer 的完整步骤  Win11怎么设置开机NumLock亮 Win11修改注册表InitialKeyboardIndicators值  sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南  Win11怎么修改默认浏览器_Windows 11设置Chrome为默认  黑鲨3Pro怎样在相册开漫画风滤镜_iPhone黑鲨3Pro相册开漫画风滤镜【趣味滤镜】  Django AJAX 文件上传教程:解决图片无法保存到模型的常见问题  Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量  c++中的std::forward_list和std::list有什么不同_c++ forward_list与list区别分析  Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】  俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航  Node.js CSV 数据处理:基于字段值条件过滤整条记录的策略  J*aScript井字棋(Tic-Tac-Toe)核心交互逻辑实现教程  Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换  如何使用 Excel 发布器与 Power BI 分享 Excel 洞察  提升Kafka消费者健壮性:会话超时处理与消息处理语义  使用J*aScript检测输入元素是否包含在特定类中  UC浏览器如何安装插件 UC浏览器添加扩展程序详细教程【进阶】  C#使用XPath查询节点时出错? 常见语法错误与调试技巧 

搜索