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目前停止了该规范的更新,可能对目前的规范设计并不满意,而目前浏览器厂商的支持度也不高,后续的发展,还是未知。