WebSQL实例记录

<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

时间: 2025-01-17 04:56:08

WebSQL实例记录的相关文章

UnderScore的使用实例记录

_.range(),主要用于区间的获取操作.参数说明:(param1):范围上限,(param1,param2):起始及结束范围,(param1,param2,param3):起始结束范围,正数则为区间跨度,-1则为:负数区间跨度. _.range(10); => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] _.range(1, 11); => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] _.range(0, 30, 5); => [0, 5, 10

log4net实现多实例记录

原文地址:实现多个LOG4NET日志记录器实例 本文内容为摘抄,请查看原文. 对于.NET Framework开发者来说,使用Log4Net进行日志记录是非常方便的,通常只要写好配置文件和简单的编码就可以轻松实现应用程序的日志记录功能.但是因为很多时候我们做开发没有时间详细阅读文档,所以也会因疏忽犯很多错误,下面写的就是因为没有仔细阅读配置文件文档引发的一个错误. 应用环境:一个Web应用程序,采用三层体系结构,所以记录日志的时候分为应用程序日志.数据访问日志和操作记录日志三个日志.三个日志采用

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

这段时间准备测试api接口,postman这个工具很是方便,特别是里面的tests的javascript脚本. 记录一下测试接口常用的tests验证的实例. 1.设置环境变量 postman.setEnvironmentVariable("key", "value"); 2.将嵌套独享设置为环境变量var array = [1, 2, 3, 4];postman.setEnvironmentVariable("array", JSON.strin

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

JDK提供了两个方法,System.currentTimeMillis()和System.nanoTime(),这两个方法都可以用来获取表征当前时间的数值.但是如果不仔细辨别这两个方法的差别和联系,在使用当中也很容易出错.笔者在前不久的工作当中使用System.currentTimeMillis()时就踩了一个大坑,后来在查明System.currentTimeMillis()和System.nanoTime()的特性后,才用System.nanoTime()来填了这个坑.本文,笔者就以自己的踩

quartz 实例记录

之前介绍过了quartz的一些相关理论知识,感觉上挺简单的,实际动手操作也确实如此,去quartz的官网上把Jar包下载下来以后,会看到它的目录里有例子程序,看完第一个例子觉得还可以,但是看后面两个例子程序有点让人小小的无语,可能quartz觉得程序写的越多,给出的使用方法也会越多,但是看上去很乱,而且大部分代码是重复的,所以我把他们简单化成一个例子,把它们记录下来. 本文一共有两个例子,这两个例子共用一个Job的实现,叫MyJob类,代码如下 package com.jll.quartz; i

第三方接口调用异常补偿机制实现实例记录

背景: 我们的组件(简称A),在业务链中属于数据支撑节点.其中与组件B存在接口同步数据的直接关系(API接口直接调用进行数据交互) 问题: 我们的上游有另一个组件C(带有界面),调用A(us)进行数据的变更操作,此时需要A调用B服务接口进行同步,问题出在这里,C调用 A通常速度比较快,比较稳定,但是A调用B经常超时或者失败,网络原因or 组件B自己的设计原因吧,反正是推不动 方案:经沟通考察,这条数据的变更在可接受的时间范围只要最终一致即可,于是首先,我们先将事物中的调用B服务的一系列逻辑抽出来

SQL——实例记录(对查询结果排行号)

select 订单编号, DENSE_RANK() over(order by 订单编号) from test 排序结果: 55678-0-1     1 55678-0-1     1 33454-0-1     2 33454-0-1     2 33454-0-1     2 这种是按照订单不同的顺序依次往后排 当然也可以在 over后面加上你想要的起始号 例:DENSE_RANK() over(order by 订单编号)+30 那么行号结果是31和32 正常排序: select 订单编

Linq 多连接及 left join 实例 记录

var retList = from d in mbExList.Cast<MaterialBaseEx>().ToList() join c in umcList.Cast<ClassifyBaseEx>().ToList() on d.ClsCode equals c.ClsCode join b in collectItem.Cast<CollectItem>().ToList() on d.Guid equals b.MatID into temp join e

SQL——实例记录(排序)

通常排序使用order by 语句 参数后可有多个字段. 如先按长后按宽排序 : select * from test order by 长 desc ,宽 asc 条件式判断: select * from test order by  CASE WHEN (型号 LIKE '%d-286%') THEN 0 ELSE 1 END ,长 desc,宽 desc --当条件满足型号像D-286这种的会先按照这个来排序 如果不是随机按长宽排序