视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
史上最全Oracle安装配置图文教程,含TNS配置 史上最全MySQL使用规范分享 新手SqlServer数据库dba需要注意的一些小细节 婚姻和爱情,并不是1+1=2,而是0.5+0.5=1 新手必须了解的oracle入门知识 北大计算机组成原理笔记2.1为什么要有指令系统 数据库有哪些 史上最简单的MySQL数据备份与还原教程 惠而浦空调内机漏水 海尔空调如何拆装 奥克斯空调如何拆装 美的空调如何进行拆装 志高空调如何拆装 夏普空调内机漏水 澳柯玛空调如何拆装 空调显示e4怎么回事 TCL空调内机漏水 aux空调显示e5 三星空调内机漏水 奥克斯空调故障代码e4 史上最全的 jmeter 获取 jdbc 数据使用的四种方法 史上最全的ORACLE基础教程 汽车之家社区从传统商业数据库到开源分布式数据库的架构变迁 春秋-SQLi题 什么是数据库 史上最全的数据库面试题,不看绝对后悔(转) 史上最全的MYSQL备份方法 新手详解JAVA+数据库+JSP完成简单页面 史上最全mysql删库跑路必会姿势 史上最全的数据库面试题,不看绝对后悔 新手 php连接数据库大概。简单过程浅析以及遇到的问题分析 新手PHP连接MySQL数据库出问题(Warning: mysqli_connect(): (HY000/1045): Access denied for user 'root'@'localhost' (using password: YES)) 史上最全的 SQL 注入资料,收藏不谢 北大青鸟第二学期 123章数据库选择题 北大青鸟第二期 第三章SQL编程 使用变量和if-else 新手指南:DVWA-1.9全级别教程之SQL Injection 新手学SQL Server pdf 浏览器兼容性工具 Spoon Browser Sandbox 新手参考:Centos上安装MySQL社区版全过程 北京MongoDB用户组群 465614686
浏览器数据库 IndexedDB 入门教程
2020-11-09 05:56:40 责编:小采
文档

上面的对象中,id属性可以当作主键。

数据体可以是任意数据类型,不限于对象。

(4)索引

为了加速数据的检索,可以在对象仓库里面,为不同的属性建立索引。

(5)事务

数据记录的读写和删改,都要通过事务完成。事务对象提供errorabortcomplete三个事件,用来监听操作结果。

三、操作流程

IndexedDB 数据库的各种操作,一般是按照下面的流程进行的。这个部分只给出简单的代码示例,用于快速上手,详细的各个对象的 API 请看这里。

3.1 打开数据库

使用 IndexedDB 的第一步是打开数据库,使用indexedDB.open()方法。


var request = window.indexedDB.open(databaseName, version);

这个方法接受两个参数,第一个参数是字符串,表示数据库的名字。如果指定的数据库不存在,就会新建数据库。第二个参数是整数,表示数据库的版本。如果省略,打开已有数据库时,默认为当前版本;新建数据库时,默认为1

indexedDB.open()方法返回一个 IDBRequest 对象。这个对象通过三种事件errorsuccessupgradeneeded,处理打开数据库的操作结果。

(1)error 事件

error事件表示打开数据库失败。


request.onerror = function (event) {
 console.log(‘数据库打开报错‘);
};

(2)success 事件

success事件表示成功打开数据库。


var db;

request.onsuccess = function (event) {
 db = request.result;
 console.log(‘数据库打开成功‘);
};

这时,通过request对象的result属性拿到数据库对象。

(3)upgradeneeded 事件

如果指定的版本号,大于数据库的实际版本号,就会发生数据库升级事件upgradeneeded


var db;

request.onupgradeneeded = function (event) {
 db = event.target.result;
}

这时通过事件对象的target.result属性,拿到数据库实例。

3.2 新建数据库

新建数据库与打开数据库是同一个操作。如果指定的数据库不存在,就会新建。不同之处在于,后续的操作主要在upgradeneeded事件的监听函数里面完成,因为这时版本从无到有,所以会触发这个事件。

通常,新建数据库以后,第一件事是新建对象仓库(即新建表)。


request.onupgradeneeded = function(event) {
 db = event.target.result;
 var objectStore = db.createObjectStore(‘person‘, { keyPath: ‘id‘ });
}

上面代码中,数据库新建成功以后,新增一张叫做person的表格,主键是id

更好的写法是先判断一下,这张表格是否存在,如果不存在再新建。


request.onupgradeneeded = function (event) {
 db = event.target.result;
 var objectStore;
 if (!db.objectStoreNames.contains(‘person‘)) {
 objectStore = db.createObjectStore(‘person‘, { keyPath: ‘id‘ });
 }
}

主键(key)是默认建立索引的属性。比如,数据记录是{ id: 1, name: ‘张三‘ },那么id属性可以作为主键。主键也可以指定为下一层对象的属性,比如{ foo: { bar: ‘baz‘ } }foo.bar也可以指定为主键。

如果数据记录里面没有合适作为主键的属性,那么可以让 IndexedDB 自动生成主键。


var objectStore = db.createObjectStore(
 ‘person‘,
 { autoIncrement: true }
);

上面代码中,指定主键为一个递增的整数。

新建对象仓库以后,下一步可以新建索引。


request.onupgradeneeded = function(event) {
 db = event.target.result;
 var objectStore = db.createObjectStore(‘person‘, { keyPath: ‘id‘ });
 objectStore.createIndex(‘name‘, ‘name‘, { unique: false });
 objectStore.createIndex(‘email‘, ‘email‘, { unique: true });
}

上面代码中,IDBObject.createIndex()的三个参数分别为索引名称、索引所在的属性、配置对象(说明该属性是否包含重复的值)。

3.3 新增数据

新增数据指的是向对象仓库写入数据记录。这需要通过事务完成。


function add() {
 var request = db.transaction([‘person‘], ‘readwrite‘)
 .objectStore(‘person‘)
 .add({ id: 1, name: ‘张三‘, age: 24, email: ‘zhangsan@example.com‘ });

 request.onsuccess = function (event) {
 console.log(‘数据写入成功‘);
 };

 request.onerror = function (event) {
 console.log(‘数据写入失败‘);
 }
}

add();

上面代码中,写入数据需要新建一个事务。新建时必须指定表格名称和操作模式("只读"或"读写")。新建事务以后,通过IDBTransaction.objectStore(name)方法,拿到 IDBObjectStore 对象,再通过表格对象的add()方法,向表格写入一条记录。

写入操作是一个异步操作,通过监听连接对象的success事件和error事件,了解是否写入成功。

3.4 读取数据

读取数据也是通过事务完成。


function read() {
 var transaction = db.transaction([‘person‘]);
 var objectStore = transaction.objectStore(‘person‘);
 var request = objectStore.get(1);

 request.onerror = function(event) {
 console.log(‘事务失败‘);
 };

 request.onsuccess = function( event) {
 if (request.result) {
 console.log(‘Name: ‘ + request.result.name);
 console.log(‘Age: ‘ + request.result.age);
 console.log(‘Email: ‘ + request.result.email);
 } else {
 console.log(‘未获得数据记录‘);
 }
 };
}

read();

上面代码中,objectStore.get()方法用于读取数据,参数是主键的值。

3.5 遍历数据

遍历数据表格的所有记录,要使用指针对象 IDBCursor。


function readAll() {
 var objectStore = db.transaction(‘person‘).objectStore(‘person‘);

 objectStore.openCursor().onsuccess = function (event) {
 var cursor = event.target.result;

 if (cursor) {
 console.log(‘Id: ‘ + cursor.key);
 console.log(‘Name: ‘ + cursor.value.name);
 console.log(‘Age: ‘ + cursor.value.age);
 console.log(‘Email: ‘ + cursor.value.email);
 cursor.continue();
 } else {
 console.log(‘没有更多数据了!‘);
 }
 };
}

readAll();

上面代码中,新建指针对象的openCursor()方法是一个异步操作,所以要监听success事件。

3.6 更新数据

更新数据要使用IDBObject.put()方法。


function update() {
 var request = db.transaction([‘person‘], ‘readwrite‘)
 .objectStore(‘person‘)
 .put({ id: 1, name: ‘李四‘, age: 35, email: ‘lisi@example.com‘ });

 request.onsuccess = function (event) {
 console.log(‘数据更新成功‘);
 };

 request.onerror = function (event) {
 console.log(‘数据更新失败‘);
 }
}

update();

上面代码中,put()方法自动更新了主键为1的记录。

3.7 删除数据

IDBObjectStore.delete()方法用于删除记录。


function remove() {
 var request = db.transaction([‘person‘], ‘readwrite‘)
 .objectStore(‘person‘)
 .delete(1);

 request.onsuccess = function (event) {
 console.log(‘数据删除成功‘);
 };
}

remove();

3.8 使用索引

索引的意义在于,可以让你搜索任意字段,也就是说从任意字段拿到数据记录。如果不建立索引,默认只能搜索主键(即从主键取值)。

假定新建表格的时候,对name字段建立了索引。


objectStore.createIndex(‘name‘, ‘name‘, { unique: false });

现在,就可以从name找到对应的数据记录了。


var transaction = db.transaction([‘person‘], ‘readonly‘);
var store = transaction.objectStore(‘person‘);
var index = store.index(‘name‘);
var request = index.get(‘李四‘);

request.onsuccess = function (e) {
 var result = e.target.result;
 if (result) {
  // ...
 } else {
  // ...
 }
}

(完)

浏览器数据库 IndexedDB 入门教程

标签:发送   访问   修改   path   uniq   读取   rename   lock   打开   

下载本文
显示全文
专题惠而浦空调内机漏水惠而浦空调内机漏水专题海尔空调如何拆装海尔空调如何拆装专题奥克斯空调如何拆装奥克斯空调如何拆装专题美的空调如何进行拆装美的空调如何进行拆装专题志高空调如何拆装志高空调如何拆装专题夏普空调内机漏水夏普空调内机漏水专题澳柯玛空调如何拆装澳柯玛空调如何拆装专题空调显示e4怎么回事空调显示e4怎么回事专题TCL空调内机漏水TCL空调内机漏水专题aux空调显示e5aux空调显示e5专题三星空调内机漏水三星空调内机漏水专题奥克斯空调故障代码e4奥克斯空调故障代码e4专题科龙空调内机漏水科龙空调内机漏水专题aux空调e4故障代码aux空调e4故障代码专题aux空调显示e4故障aux空调显示e4故障专题奥克斯空调故障代码e3怎么办奥克斯空调故障代码e3怎么办专题长虹空调内机漏水长虹空调内机漏水专题奥克斯空调故障代码f1怎么回事奥克斯空调故障代码f1怎么回事专题美的空调压缩机不工作美的空调压缩机不工作专题新科空调内机漏水新科空调内机漏水专题海尔空调e6是什么故障代码海尔空调e6是什么故障代码专题美的空调压缩机不启动美的空调压缩机不启动专题海尔空调故障代码e7海尔空调故障代码e7专题扬子空调内机漏水扬子空调内机漏水专题海尔空调压缩机不工作海尔空调压缩机不工作专题海尔空调压缩机不启动海尔空调压缩机不启动专题1匹空调耗电量1匹空调耗电量专题格力空调故障代码e5怎么办格力空调故障代码e5怎么办专题奥克斯空调压缩机不工作奥克斯空调压缩机不工作专题澳柯玛空调压缩机不工作澳柯玛空调压缩机不工作专题开源web报表工具专题开源 可视化工具专题flink可视化工具专题vue 可视化工具专题web应用基础专题web基础应用专题加载分析工具库专题etl工具web专题easyweb下载专题web etl工具专题开源web etl工具专题web技术应用基础专题web应用程序组件专题开源可视化编辑器专题轻量级博客系统专题web-iou下载专题web pdf插件专题加载webpdf专题开源web报表插件专题可视化bi插件专题