<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
</head>
<body>
<script src="dbMgr.js" type="text/javascript">
</script>
<script language="javascript" type="text/javascript">
/* 注: 在Qt 的QWebView里打开,需要设置一些参数
如:
ui.webView->page()->settings()->setAttribute(QWebSettings::OfflineStorageDatabaseEnabled,true);
ui.webView->page()->settings()->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled,true);
ui.webView->page()->settings()->setAttribute(QWebSettings::LocalStorageEnabled,true);
ui.webView->page()->settings()->setOfflineStoragePath("d://home//offline1");
ui.webView->page()->settings()->setOfflineWebApplicationCachePath("d://home//offline2");
ui.webView->page()->settings()->setLocalStoragePath("d://home");// /offline3
ui.webView->page()->settings()->setOfflineStorageDefaultQuota(1000*1024*1024);
ui.webView->page()->settings()->setOfflineWebApplicationCacheQuota(500*1024*1024);
*/
/***********************************************************/
//db回调类
/***********************************************************/
function dbFunMgr() { };
dbFunMgr.SelectCallback = function(tx, result) {
var str_result = "";
try {
// alert("SelectCall backselect in");
for (var i = 0; i < result.rows.length; ++i) {
var row = result.rows.item(i);
str_result += "id:" + row['id'] + " text:" + row['text'] + " ";
}
alert("select result: " + str_result);
}
catch (err) {
alert("selectCallback:" + err.message);
}
}
/************************** end dbFunMgr() *******************/
/***************************************************************/
//操作DB 测试各个功能函数类(这是异步操作)
/*************************************************************/
function AsynsDBOperate() {
};
AsynsDBOperate.prototype.keyvalueOperate = function() {
//key value 的存取
try {
localStorage.lastname = "Smith";
document.write(localStorage.lastname);
for (var i = 0; i < 10; i++) {
localStorage.setItem("hello" + i, "Smith" + i * i);
document.write(localStorage.getItem("hello" + i) + " /r/n");
}
}
catch (err) {
alert("localStorage failed");
}
}
AsynsDBOperate.prototype.opendb = function() {
//创建数据库,创建表
try {
// alert("before open");
db = openDatabase("test20 ", "1.0", "Client side storage test add", 200000, function() { alert("on create db"); });
alert("b create tb");
db.transaction(function(tx) {
tx.executeSql("CREATE TABLE IF NOT EXISTS Texts1 (id INT NOT NULL PRIMARY KEY, text VARCHAR(255));", [], function(tx, result) { },
function(tx, error) {
alert('Failed to retrieve texts from the database - ' + error.message);
});
});
}
catch (err) {
alert("opendb error" + err.message);
return;
}
}
AsynsDBOperate.prototype.CreateTable = function()
{
try {
// alert("b create tb");
db.transaction(function(tx) {
tx.executeSql("CREATE TABLE IF NOT EXISTS Texts1 (id INT NOT NULL PRIMARY KEY, text VARCHAR(255));", [], function(tx, result) { },
function(tx, error) {
alert('Failed to retrieve texts from the database - ' + error.message);
});
});
}
catch (err) {
alert("create talbe error" + err.message);
return;
}
}
AsynsDBOperate.prototype.insertData = function() {
//插入数据
try {
var i = 19;
var str_key = i;
var str_sql = " INSERT INTO Texts1( id, text) VALUES(" + str_key.toString() + ", 'test1" + str_key.toString() + " ');";
str_key = i * i;
var str_sql1 = "INSERT INTO Texts1( id, text) VALUES(" + str_key.toString() + ", 'test1" + str_key.toString() + " ');";
// alert(str_sql);
db.transaction(
function(tx) {
//这里executeSql一次是可以执行多条的
tx.executeSql(str_sql.toString(), [], function(tx, result) { }, function(tx, error) {
alert('insert error - ' + error.message);
});
tx.executeSql(str_sql1.toString(), [], function(tx, result) { }, function(tx, error) {
alert('insert error - ' + error.message);
});
//值的绑定,防止代码注入
tx.executeSql('INSERT INTO Texts1( id, text) VALUES (?, ?)', [102, 'oooo'], function(tx, result) { }, function(tx, error) {
alert('insert error - ' + error.message);
});
});
//貌似不能一次执行多条db.transaction。
}
catch (err) {
alert("insert error" + err.message);
}
}
AsynsDBOperate.prototype.updateData = function() {
//更新数据
try {
var i = 19;
var str_sql_update = "update Texts1 set text = 'modify' where id = " + i;
var str_sql_update1 = "update Texts1 set text = 'modify' where id = " + i * i;
// alert(str_sql_update);
db.transaction(
function(tx) {
tx.executeSql(str_sql_update.toString(), [], function(tx, result) { }, function(tx, error) {
alert('update error - ' + error.message);
});
tx.executeSql(str_sql_update1.toString(), [], function(tx, result) { }, function(tx, error) {
alert('update error - ' + error.message);
});
});
}
catch (err) {
alert("update error" + err.message);
}
}
AsynsDBOperate.prototype.selectData = function() {
try {
db.transaction(function(tx) {
tx.executeSql("SELECT id, text FROM Texts1", [], dbFunMgr.SelectCallback, function(tx, error) {// 回调函数:dbFunMgr.SelectCallback定义在前面
alert('Failed to retrieve texts from the database - ' + error.message);
});
});
}
catch (err) {
alert("select error" + err.message);
}
}
/*********************** end funOperate() ******************************/
//测试DB功能
try {
var dbtest = new AsynsDBOperate();
alert("step1");
dbtest.opendb();
alert("step2");
dbtest.CreateTable();
alert("step3");
dbtest.insertData();
alert("step4");
dbtest.updateData();
alert("step5");
dbtest.selectData();
alert("step6");
}
catch(err)
{
alert("dbtest error : " + err.message);
}
</script>
</body>
</html>