<table id="content">

</table>
<br>
<input type="button" id="clearBtnHook" value="更新缓存" />
<script> /** 静态初始化本地数据库**/
function initSql(dbname,version,description,maxSize,callback){
var myDB = null;
// var support = testAgentSupoort();
var support = true;
try{
//不支持本地存储,执行回调函数兼容
if(!window.openDatabase || support == false){
if(typeof callback ==="function"){
callback();
return false;
}
}else{
var mydbname = dbname || "myDB",
myversion = version || "1.0",
mydescription = description || "firstTest",
mymaxSize = maxSize || 100000;
myDB = openDatabase(mydbname,myversion,mydescription,mymaxSize);
}
}catch(e){
alert("Unknown error "+e+".");
}
return myDB;
}; /**创建数据表**/
function creatTables(db,str){
if(!db){
alert("Failed to connect to database.");
}else{ db.transaction(function (transaction) {
transaction.executeSql(
'CREATE TABLE IF NOT EXISTS '+str,
[],
function(result){
// alert('创建表成功');
},
function(tx,error){
alert("建表错误"+error);
});
}); }
}; function testAgentSupoort(){
var ua = navigator.userAgent,
platform = navigator.platform,
// Rendering engine is Webkit, and capture major version
wkmatch = ua.match( /AppleWebKit\/([0-9]+)/ ),
wkversion = !!wkmatch && wkmatch[ 1 ];
if (
/** 是否为os系统**/
(ua.indexOf( "iPhone" ) > -1 || ua.indexOf( "iPad" ) > -1 || ua.indexOf( "iPod" ) > -1 ) ||
/** 是否为安卓,并且版本不于534(Android 4.0)**/
( ua.indexOf( "Android" ) > -1 && wkversion && wkversion>=534)
){
return true;
} return false; } var dbUtil = {
insert:function(db,tabName,Arr){ /**向表插入数据**/
var str=[];
if(Object.prototype.toString.call(Arr) === '[object Array]'){
for(var i=0,len =Arr.length;i<len;i++){
str.push("?");
}
str = str.join(',');
}else{
alert("最后一位参数必须为数组");
}
db.transaction(
function (transaction) {
transaction.executeSql('INSERT INTO '+tabName+' values('+str+')',Arr,
function(result){}, function(tx,error){});
}) ;
},
deleted:function(db,tabName,keyArr){ /**删除数据**/
var str="",key=[]
if(typeof keyArr==="object"){
for(var i in keyArr){
str+=i+"=? ";
key.push(keyArr[i]);
}
}
db.transaction(
function (transaction) {
transaction.executeSql("DELETE FROM "+tabName+" where "+str,key,
function (tx, result) {},function (tx, error) {alert('更新失败: ' + error.message);});
}); },
update:function(db,tabName,upArr,keyArr,callback){ /**更新数据**/
var strs=[],str1="",key=[],up =[];
if(typeof upArr==="object" && typeof keyArr==="object" ){
for(var i in upArr){
strs.push(i+"=? ");
up.push(upArr[i]);
}
for(var k in keyArr){
str1+=k+"=? ";
key.push(keyArr[k]); } }else{
alert("后两位参数必须为对象");
}
strs = strs.join(',');
lastArr =up.concat(key);
db.transaction(
function (transaction) {
transaction.executeSql("UPDATE "+tabName+" SET "+strs+" where "+str1,lastArr,
function (tx, result) {
if(typeof callback ==="function"){
callback(result)
}
},function (tx, error) {alert('更新失败: ' + error.message);});
}); },
query:function(db,mysql,keyArr,callback){ /**查询数据**/
if(mysql){
db.transaction(
function (transaction) {
transaction.executeSql( mysql,keyArr,
function (tx, result) {
if(typeof callback ==="function"){
callback(result)
}
},function (tx, error) {alert('查询失败: ' + error.message);});
});
} },
droptable: function(db,tabName){ /** 删除数据表**/
db.transaction(function (tx) {
tx.executeSql('drop table '+tabName);
}); }
} window.localData = {
hname:location.hostname?location.hostname:'localStatus',
isLocalStorage:window.localStorage?true:false,
dataDom:null, initDom:function(){
if(!this.dataDom){
try{
this.dataDom = document.createElement('input');
this.dataDom.type = 'hidden';
this.dataDom.style.display = "none";
this.dataDom.addBehavior('#default#userData');
document.body.appendChild(this.dataDom);
var exDate = new Date();
exDate = exDate.getDate()+30;
this.dataDom.expires = exDate.toUTCString();
}catch(ex){
return false;
}
}
return true;
},
set:function(key,value){
if(this.isLocalStorage){
window.localStorage.setItem(key,value);
}else{
if(this.initDom()){
this.dataDom.load(this.hname);
this.dataDom.setAttribute(key,value);
this.dataDom.save(this.hname)
}
}
},
get:function(key){
if(this.isLocalStorage){
return window.localStorage.getItem(key);
}else{
if(this.initDom()){
this.dataDom.load(this.hname);
return this.dataDom.getAttribute(key);
}
}
},
remove:function(key){
if(this.isLocalStorage){
localStorage.removeItem(key);
}else{
if(this.initDom()){
this.dataDom.load(this.hname);
this.dataDom.removeAttribute(key);
this.dataDom.save(this.hname)
}
}
}
} //创建本地数据库
var MDB = initSql('','','','','');
//设置本地存储标示
var flag = localData.get('flag');
// alert(flag)
if(flag){
//删除数据
// var id = 1;
// dbUtil.deleted(MDB,"Shop",{id:id});
var weid = 1;
//查询数据
// dbUtil.query(MDB,"SELECT * FROM Shop where id=?",[weid],function(result){ //查询单条数据
dbUtil.query(MDB,"SELECT * FROM Shop",[],function(result){
// alert(result.rows.item(0)["id"]);
var shopname = '';
var id = '';
var addtime = '';
var html = '<tr><th>id</th><th>shopname</th><th>addtime</th></tr>';
for(var i=0,le = result.rows.length;i<le;i++){
shopname = result.rows.item(i)["shopname"];
id = result.rows.item(i)["id"];
addtime = result.rows.item(i)["addtime"];
html += "<tr><th>"+id+"</th><th>"+shopname+"</th><th>"+addtime+"</th></tr>";
} var con = document.getElementById("content");
con.innerHTML = html;
});
}else{
//创建本地数据表结构
creatTables(MDB,"Shop(id INTEGER UNIQUE,shopname TEXT NOT NULL,addtime TEXT NOT NULL)");
var shopArr1 = [1,'测试'+Math.ceil(Math.random()*100),Math.ceil(Math.random()*10000)]; var shopArr2 = [2,'测试'+Math.ceil(Math.random()*100),Math.ceil(Math.random()*10000)];
//插入数据
dbUtil.insert(MDB,"Shop",shopArr1);
dbUtil.insert(MDB,"Shop",shopArr2); //设置本地存储标示
localData.set('flag',1); dbUtil.query(MDB,"SELECT * FROM Shop",[],function(result){
// alert(result.rows.item(0)["id"]);
var shopname = '';
var id = '';
var addtime = '';
var html = '<tr><th>id</th><th>shopname</th><th>addtime</th></tr>';
for(var i=0,le = result.rows.length;i<le;i++){
shopname = result.rows.item(i)["shopname"];
id = result.rows.item(i)["id"];
addtime = result.rows.item(i)["addtime"];
html += "<tr><th>"+id+"</th><th>"+shopname+"</th><th>"+addtime+"</th></tr>";
} var con = document.getElementById("content");
con.innerHTML = html;
});
} //更新缓存
var btn = document.getElementById('clearBtnHook');
btn.onclick = function(){
//删除本地数据表
dbUtil.droptable(MDB,"Shop");
//取消本地存储标示
localData.remove('flag');
alert('缓存清除成功!');
window.location.reload();
}; </script>

http://www.cnblogs.com/xumingxiang/archive/2012/03/25/2416418.html

WebSQL实例记录的更多相关文章

  1. ORACLE AWR报告生成过程出现多个实例记录分析

    在一次生成AWR报告中,发现在"Instances in this Workload Repository schema"部分,出现了多个实例记录信息(host敏感信息被用host ...

  2. mongodb导出导入实例记录

    mongodb导出导入实例记录 平时很用mongodb,所以用到了,就需要去网上搜索方法,干脆将自己的实际经历记录下来,方便日后使用. # 大致需求 源库:db_name_mongo 源IP:192. ...

  3. Openstack 使用Centos官方镜像创建实例记录

    Openstack 使用Centos官方镜像创建实例记录 准备centos镜像 官方地址:http://cloud.centos.org/centos/7/images 可以看到有各种版本的镜像,我在 ...

  4. 【填坑纪事】一次用System.nanoTime()填坑System.currentTimeMills()的实例记录

    JDK提供了两个方法,System.currentTimeMillis()和System.nanoTime(),这两个方法都可以用来获取表征当前时间的数值.但是如果不仔细辨别这两个方法的差别和联系,在 ...

  5. postman tests实例记录(还没看,一些常用的)

    这段时间准备测试api接口,postman这个工具很是方便,特别是里面的tests的javascript脚本. 记录一下测试接口常用的tests验证的实例. 1.设置环境变量 postman.setE ...

  6. log4net实现多实例记录

    原文地址:实现多个LOG4NET日志记录器实例 本文内容为摘抄,请查看原文. 对于.NET Framework开发者来说,使用Log4Net进行日志记录是非常方便的,通常只要写好配置文件和简单的编码就 ...

  7. quartz 实例记录

    之前介绍过了quartz的一些相关理论知识,感觉上挺简单的,实际动手操作也确实如此,去quartz的官网上把Jar包下载下来以后,会看到它的目录里有例子程序,看完第一个例子觉得还可以,但是看后面两个例 ...

  8. java--线程认识与实例记录 NO.1

    下面的内容都是从java编程思想一书中摘取出来,我认为很有产考价值,并且便于后续使用. 主要内容是记录继承thread和实现runnable接口两种方式的代码用法,及内部类中启用线程的用法. 1.首先 ...

  9. maven使用实例记录

    Maven入门指南① :Maven 快速入门及简单使用Maven入门指南② :Maven 常用命令,手动创建第一个 Maven 项目Maven入门指南③:坐标和依赖Maven入门指南④:仓库 Mave ...

随机推荐

  1. Bellman_ford最短路

    #include <cstdio> #include <iostream> #include <algorithm> #include <cstring> ...

  2. HTML5 Web socket和socket.io

    what is websockets Two-way communication over ont TCP socket, a type of PUSH technology HTML5的新特性,用于 ...

  3. gtest官方文档浅析

    gtest的所有官方文档:http://code.google.com/p/googletest/w/list 选择单元测试框架的那些事 gtest不是唯一开源的单元测试框架,我也不觉得它是最好的单元 ...

  4. File System Minifilter Drivers(文件系统微型过滤驱动)入门

    问题: 公司之前有一套文件过滤驱动,但是在实施过程中经常出现问题,现在交由我维护.于是在边看代码的过程中,一边查看官方资料,进行整理. 这套文件过滤驱动的目的只要是根据应用层下发的策略来控制对某些特定 ...

  5. java笔记12之面向对象初始

    1 概述 类:是一组相关的属性和行为的集合.是一个抽象的概念.     对象:是该类事物的具体表现形式.具体存在的个体. (1)面向对象思想     面向对象是基于面向过程的编程思想.         ...

  6. 使用MJRefresh遇到的坑

    在使用MJRefresh的时候,下拉刷新表头停在了上部,箭头并没有隐藏 解决方法:进行数据请求的时候不要使用 beginRefresh方法,要直接调用方法进行数据请求

  7. Android Toast 自定义

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  8. poj 3271 Lilypad Pond bfs

    因为有了1的存在,使得问题变得比较难搞了,所以比较简单的做法就是把1去掉,先做一次bfs,处理出每个点能够一步到达的点(一定是1步). 然后就可以在新图上用bfs算出两个点之间的最短路,和最短路的个数 ...

  9. 判断线段相交(hdu1558 Segment set 线段相交+并查集)

    先说一下题目大意:给定一些线段,这些线段顺序编号,这时候如果两条线段相交,则把他们加入到一个集合中,问给定一个线段序号,求在此集合中有多少条线段. 这个题的难度在于怎么判断线段相交,判断玩相交之后就是 ...

  10. 布局动画 LayoutAnimation

    简介 http://blog.csdn.net/pipisky2006/article/details/8317091 补间动画只能对一个控件使用,如果要对某一组控件播放一样的动画的话,可以考虑lay ...