使用cookie储存数据的缺点:
- cookies的大小被限制在4KB
- 发送cookies时浪费一部分带宽。
- 操作cookies复杂。
html5提供了一种在客户端本地保存数据的功能,–
Web Storeage功能。
web Storage分为两种:
SessionStorage(保存在session中,临时保存)
保存数据:sessionStorage.setItem(key,value);
读取数据:variable = sessionStorage.getItem(key);
localStorage(保存在本地磁盘)
保存数据:localStorage.setItem(key,value);
读取数据:variable = localStorage.getItem(key);
本地数据库:
HTML5中内置了一个可以使用sql语言来访问的数据库,这种不需要储存在服务器上的文件型数据库被称为“SQLLite”.
步骤:
1. 创建访问数据库的对象。
var db = openDatabase(‘mydb’,’1.0’,’Test DB’,2*1024*1024);
参数依次为:数据库名,版本号,数据库的描述,数据库大小。
2. 使用事务处理
db.transaction(function(tx){
tx.executeSql(‘create table if not exists logs(id unique,Log)’);
});
使用回调函数作为参数,在这个函数中执行访问数据库的语句。
用executeSql执行查询
transaction.executeSql(sqlquery,[],dataHandler,errorHandler);
四个参数依次为需要执行的sql语句,sql语句中所有使用到的参数的数组,执行成功时的回调函数,出错时的回调函数。
transaction.executeSql(”update peopel set age=? where name = ?;”,[age,name]);
function dataHandler(transaction,results){}
function errorHandler(transaction,errmsg){}
执行成功后有回调函数有个结果集对象,此对象有个rows属性,保存了查询到的每条数据,条数可用rows.length获取。rows[index]或rows.Item([index])的形式取出每条数据.goole Chrome5不支持rows.Item(index)。
完整案例:
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>使用数据库实现Web留言本</title>
<script type="text/javascript">
var datatable = null;
var db = openDatabase('MyData', '', 'My Database', 102400);
function init()
{
datatable = document.getElementById("datatable");
showAllData();
}
function removeAllData()
{
for (var i =datatable.childNodes.length-1; i>=0; i--)
{
datatable.removeChild(datatable.childNodes[i]);
}
var tr = document.createElement('tr');
var th1 = document.createElement('th');
var th2 = document.createElement('th');
var th3 = document.createElement('th');
th1.innerHTML = '姓名';
th2.innerHTML = '留言';
th3.innerHTML = '时间';
tr.appendChild(th1);
tr.appendChild(th2);
tr.appendChild(th3);
datatable.appendChild(tr);
}
function showData(row)
{
var tr = document.createElement('tr');
var td1 = document.createElement('td');
td1.innerHTML = row.name;
var td2 = document.createElement('td');
td2.innerHTML = row.message;
var td3 = document.createElement('td');
var t = new Date();
t.setTime(row.time);
td3.innerHTML=t.toLocaleDateString()+" "+t.toLocaleTimeString();
tr.appendChild(td1);
tr.appendChild(td2);
tr.appendChild(td3);
datatable.appendChild(tr);
}
function showAllData()
{
db.transaction(function(tx)
{
tx.executeSql('CREATE TABLE IF NOT EXISTS MsgData(name TEXT, message TEXT, time INTEGER)',[]);
tx.executeSql('SELECT * FROM MsgData', [], function(tx, rs)
{
removeAllData();
for(var i = 0; i < rs.rows.length; i++)
{
showData(rs.rows.item(i));
}
});
});
}
function addData(name, message, time)
{
db.transaction(function(tx)
{
tx.executeSql('INSERT INTO MsgData VALUES(?, ?, ?)',[name, message, time],function(tx, rs)
{
alert("成功保存数据!");
},
function(tx, error)
{
alert(error.source + "::" + error.message);
});
});
}
function saveData()
{
var name = document.getElementById('name').value;
var memo = document.getElementById('memo').value;
var time = new Date().getTime();
addData(name,memo,time);
showAllData();
}
</script>
</head>
<body onload="init();">
<h1>使用数据库实现Web留言本</h1>
<table>
<tr><td>姓名:</td><td><input type="text" id="name"></td></tr>
<tr><td>留言:</td><td><input type="text" id="memo"></td></tr>
<tr>
<td></td>
<td><input type="button" value="保存" onclick="saveData();"></td>
</tr>
</table>
<hr>
<table id="datatable" border="1"></table>
<p id="msg"></p>
</body>
</html>