[html5]Web SQL

来源:互联网 发布:单机网络手游排行榜 编辑:程序博客网 时间:2024/04/29 18:58

Web sql 是在浏览器模拟数据库,可以使用JS来操作SQL完成对数据的读写,但是这个东西目前支持的浏览器不多,而且其W3C规范已经停止支持,貌似其前景不是很明朗

W3C 规范:http://www.w3.org/TR/webdatabase/#dom-sqltransaction-sync-executesql (目前已经停止更新,组织也没想清楚发展方向)

支持的浏览器以及版本:

Safari (3.2+)
Chrome (3.0+)
Opera (10.5+)


通常常规的离线应用使用的是webstorage,但是webstorage带有很大的局限性,比如存储空间,domain安全机制等,而WEB SQL 就没有那么多的限制,其有更大的存储空间(可自定义设置),跨域读写,存储结构自由等特点,而且可以方便的使用SQL来进行读写,非常的方便。

其API也是比较简单,规范中都有说明,这里备份一下自己的代码:

<script>function clearTxt() {document.getElementById('result').innerHTML = ' ';}function drop() {if (window.openDatabase){var dbs = openDatabase('mydatabase', 'v1.0', 'Save data DB', 100);if(dbs) {dbs.transaction(function(tx){tx.executeSql("DROP TABLE AUCTION_TABLE", [], function(tx, results){// do nothing},function(tx,error){alert(error.message);});});} else {alert('open database failed.');}} else {alert('not support web sql.');}}function create() {if (window.openDatabase){var dbs = openDatabase('mydatabase', 'v1.0', 'Save data DB', 100);if(dbs) {dbs.transaction(function(tx){tx.executeSql("CREATE TABLE IF NOT EXISTS AUCTION_TABLE(ID UNIQUE, TITLE, PRICE, PIC)");});} else {alert('open database failed.');}} else {alert('not support web sql.');}}function del() {if (window.openDatabase){var dbs = openDatabase('mydatabase', 'v1.0', 'Save data DB', 100);if(dbs) {dbs.transaction(function(tx){tx.executeSql("DELETE FROM AUCTION_TABLE;");});} else {alert('open database failed.');}} else {alert('not support web sql.');}}function insert() {if (window.openDatabase){var dbs = openDatabase('mydatabase', 'v1.0', 'Save data DB', 100);if(dbs) {dbs.transaction(function(tx){tx.executeSql("INSERT INTO AUCTION_TABLE(ID, TITLE, PRICE, PIC) VALUES(?,?,?,?)",['1', 'Auction title', '598', 'http://img02.taobaocdn.com/tps/i2/T1VsaWXc8lXXXXXXXX-490-170.png']);});} else {alert('open database failed.');}} else {alert('not support web sql.');}}function select() {if (window.openDatabase){var dbs = openDatabase('mydatabase', 'v1.0', 'Save data DB', 100);if(dbs) {dbs.transaction(function(tx){tx.executeSql("SELECT * FROM AUCTION_TABLE", [], function(tx, results) {if(results && results.rows && 0 < results.rows.length) {var text = "";for (var i=0; i < results.rows.length; i++){ text += results.rows.item(i).ID + '' + results.rows.item(i).TITLE + ''+ results.rows.item(i).PRICE + '' + results.rows.item(i).PIC + '<br/>';}document.getElementById('result').innerHTML = text;}}, null);});} else {alert('open database failed.');}} else {alert('not support web sql.');}}</script>

对于websql,由于宽泛的读写规则,其带来的就是很大的安全问题,跨域读取,XSS攻击,SQL注入等都是非常头疼的事情。所以什么样的数据可以存储,如何存储,需要慎重考虑。W3C目前停止了该规范的更新,可能对目前的规范设计并不满意,而目前浏览器厂商的支持度也不高,后续的发展,还是未知。