HTML5 SQLLite初体验
今天看了看HTML5 里面有一个本地的数据库,感觉挺有意思的,简单了解了一下,代码如下。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>本地数据库</title>
</head>
<body>
<h1>使用数据库实现Web留言本</h1>
<table border="0" cellspacing="1" cellpadding="1">
<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" id="save" value="保存"/></td>
</tr>
</table>
<hr />
<table border="1" id="datatable" cellspacing="0" cellpadding="0"></table>
<p id="msg"></p>
<script src="js/database.js" type="text/javascript" charset="utf-8"></script>
</body>
</html>
//文档加载完成执行init方法;
window.onload = init;
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){
/**
* 执行sql语句, 创建表
* executeSq()函数 参数如下
* sqlQuery 数据库查询语句
* [] 参数数组,替换SQL语句中的?占位符。
* dataHandler 成功后执行的回调函数(可选)
* errorHandler 失败后执行的回调函数(可选)
*/
tx.executeSql('CREATE TABLE IF NOT EXISTS MsgData(name TEXT, message TEXT, time INTEGER)', [], function(tx, rs){
}, function(tx, error){
alert('错误')
});
//执行SQL语句,查询MsgData 表中的所有数据。
tx.executeSql('SELECT * FROM MsgData', [], function(tx, rs){
//这里是SQL执行成功后调用的回调函数。
removeAllData();
for(var i = 0; i < rs.rows.length; i++){
showData(rs.rows.item(i));
}
}, function(tx, error){
alert(error.source + " :: " + error.message);
console.log(error.source + " :: " + error.message);
});
});
}
//添加数据
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);
console.log(error.source + " :: " + error.message);
});
})
}
document.getElementById('save').addEventListener('click', function(){
var name = document.getElementById('name').value;
var memo = document.getElementById('memo').value;
var time = new Date().getTime();
addData(name, memo, time);
showAllData();
}, false);

浙公网安备 33010602011771号