在HTML5中,大大丰富了客户端本地能够存储的内容,添加了不少功能来将本来必须保存在服务器上的数据转为保存在客户端本地,从而大大提升了Web应用程序的性能,减轻了服务器端的负担,使Web时代从新回到了“客户端为重,服务器为轻”的时代。javascript
在这其中,一项很是重要的功能就是数据库的本地存储功能。在HTML5中内置了一个能够经过SQL语言来访问的数据库。在HTML4中,数据库只能放在服务器端,只能经过服务器来访问数据库,可是在HTML5中,能够就像访问本地文件那样轻松的对内置的数据库进行直接访问。如今,像这种不须要存储在服务器上的,被称为“SQLite”的文件型SQL数据库已经获得了很普遍的利用,因此HTML5中也采用了这种数据库来做为本地数据库。html
三个核心方法html5
一、openDatabase:这个方法使用现有数据库或建立新数据库建立数据库对象。java
二、transaction:这个方法容许咱们根据状况控制事务提交或回滚。web
三、executeSql:这个方法用于执行真实的SQL查询。sql
openDatabase方法打开一个已经存在的数据库,若是数据库不存在,它还能够建立数据库,建立并打开数据库的语法以下:数据库
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024);
五个参数:浏览器
数据库名(mydb)服务器
版本号(1.0)函数
描述(Test DB)
数据库大小(2*1024*1024)
建立回调
最后一个,即第五个参数 建立回调,在建立数据库时会调用它,但即便没有这个参数,同样能够在运行时建立数据库。
执行查询使用database.transaction()函数,它只须要一个参数,下面是一个真实的查询语句:
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024); db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); });
为了向表中插入新记录,咱们在上面的查询语句中添加了一个简单的SQL查询,修改后的语句以下:
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024); db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "foobar")'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "logmsg")'); });
在插入新纪录时,咱们还能够传递动态值,如:
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024); db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); tx.executeSql('INSERT INTO LOGS (id,log) VALUES (?, ?'), [e_id, e_log]; });
这里的e_id和e_log是外部变量
若是要读取已经存在的记录,咱们使用一个回调捕获结果,代码以下:
var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024); db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "foobar")'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "logmsg")'); }); db.transaction(function (tx) { tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { var len = results.rows.length, i; msg = "<p>Found rows: " + len + "</p>"; document.querySelector('#status').innerHTML += msg; for (i = 0; i < len; i++){ alert(results.rows.item(i).log ); } }, null); });
最后,一个完整的HTML5文档中展示前面讲述的内容,同时使用浏览器来解析这个HTML5文档。
<!DOCTYPE HTML> <html> <head> <script type="text/javascript"> var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024); var msg; db.transaction(function (tx) { tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, log)'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (1, "foobar")'); tx.executeSql('INSERT INTO LOGS (id, log) VALUES (2, "logmsg")'); msg = '<p>Log message created and row inserted.</p>'; document.querySelector('#status').innerHTML = msg; }); db.transaction(function (tx) { tx.executeSql('SELECT * FROM LOGS', [], function (tx, results) { var len = results.rows.length, i; msg = "<p>Found rows: " + len + "</p>"; document.querySelector('#status').innerHTML += msg; for (i = 0; i < len; i++){ msg = "<p><b>" + results.rows.item(i).log + "</b></p>"; document.querySelector('#status').innerHTML += msg; } }, null); }); </script> </head> <body> <div id="status" name="status">Status Message</div> </body> </html>
原文出处: