<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. BZOJ 1032 [JSOI2007]祖码Zuma

    1032: [JSOI2007]祖码Zuma Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 637  Solved: 318[Submit][Stat ...

  2. 关于TFS2012无法发送警报邮件的问题

    前几天把公司的TFS从2010升级到2012,整个过程经历了3个小时,过程比较顺利.升级完成后眼馋各种新功能,感叹知识真是待到用时方恨少呐,只得一个一个去摸索了.其中有一个“警报”的功能让我印象深刻( ...

  3. Java---练习(面试题) :字符串截取(2-最终版)

    在java中,字符串"abcd"与字符串"ab你好"的长度是一样,都是四个字符. 但对应的字节数不同,一个汉字占两个字节. 定义一个方法,按照指定的字节数来取子 ...

  4. UIAlertController 的使用(NS_CLASS_AVAILABLE_IOS(8_0)iOS8以后有效)

    iOS 8的新特性之一就是让接口更有适应性.更灵活,因此许多视图控制器的实现方式发生了巨大的变化.全新的UIPresentationController 在实现视图控制器间的过渡动画效果和自适应设备尺 ...

  5. python学习笔记(集合的使用)

    集合 集合(set):把不同的元素组成一起形成集合,是python基本的数据类型. 集合元素(set elements):组成集合的成员 为什么需要集合? 集合的作用 1 .列表去重复数据 按照现有知 ...

  6. C++ —— 类的基础

    C++类的设计与基础       2015.9.11 1.变量和常量的命名:确定程序中的变量.常量.函数的名字都是具有描述性的名字,具有直接的意义.如numberOfStudent 比 numOfSt ...

  7. oracle管道输出

    通常我们会在oracle中用dbms_output输出调试信息,但dbms_output只能在调用过程完成才返回结果,不能实时输出的.这意味着通常我们经常要等几分钟或更长的时间才能看到调试信息,那怎么 ...

  8. [Angular 2] Using a Value from the Store in a Reducer

    RxJS allows you to combine streams in various ways. This lesson shows you how to take a click stream ...

  9. 如果ASM磁盘组由哪些物理磁盘组成?

    我们知道用下面的方法可创建 ASM 磁盘,然后再创建逻辑的ASM组 以 root 用户身份创建 ASM 磁盘.# /etc/init.d/oracleasm createdisk VOL1 /dev/ ...

  10. 深入探讨 java.lang.ref 包--转

    概述 Java.lang.ref 是 Java 类库中比较特殊的一个包,它提供了与 Java 垃圾回收器密切相关的引用类.这些引用类对象可以指向其它对象,但它们不同于一般的引用,因为它们的存在并不防碍 ...