zoukankan      html  css  js  c++  java
  • Web Sql Database 操作类,将查询语句作为参数传入。

    因为个人想开发 iphone native web app,所以想用HTML 5新特性,研究了两天,终于写了一个Web Sql Database 操作类。

    Author: Lein

    Emaill: lein_urg@163.com

    网上很多文章都不是通过传入参数的办法,而是写死代码的方法,这样就很难灵活运用;

    注意:我试了ie 9,firefox 11,貌似他们都不支持openDatabase,如果有知道的,请邮件通知我,我用的是windows下的safari版本 5.1.5,chrome 18也通过了

    另外提醒下想自己写的朋友,数据库操作是异步的,你很有可能无法立即查询到你插入的数据,我就是因为这个原因搞了好久。

    // JavaScript Document
    function _db_query(tx)
    {
    	var _sqls = typeof(this.sqls)=='undefined'?_db_query.sqls:this.sqls;
     	while(_sqls.length)
     	{
      		var sql = _sqls.shift();		
    		tx.executeSql(
    			sql[0],
    			sql[1],
    			function (t, results)
    						{     
    							try
    							{
    								if(results.rows.length>0)
    								{
    										var data = [];
    										for(var i=0;i<results.rows.length;i++)
    										{
    											data.push(results.rows.item(i));
    										}
    										this.db_cb(true, data, 0,  0);
    								}
    								else if(results.rowsAffected)
    								{
    									try{
    										this.db_cb(true, null, results.insertId,  results.rowsAffected);
    									}
    									catch(e)
    									{
    										this.db_cb(true, null, 0,  results.rowsAffected);
    									}
    								}
    							}
    							catch(e)
    							{
    								alert(e.message);
    							}
    						}, 
    			function (t, e)
    						{
    							var tmp = '';
    							if(typeof(e)=='object')
    							{
    								for(var x in e)
    								{
    									tmp += x+'='+e[x]+'\n';
    								}
    								var error = tmp;
    							}else var error = e.message;
    							
    							this.db_cb(false, error,0,0);
    						}
    		);
    	}
    }
    
    function webdb(_cb,_name,_size){
    		this.name = _name;
    		this.size = _size;
    		this.version = arguments.length>3?arguments[3]:1.0;
    		this.desc = arguments.length>4?arguments[4]:'';
    		this.db = openDatabase(this.name, this.version, this.desc, this.size * 1024);
    		this.webdb_query = _db_query;
    		this.webdb_query.__proto__.db_cb = _cb;
    		this.webdb_query.__proto__.sqls = [];
    		if(!this.db) return false;
    }
    
    webdb.prototype = {
    	db_cb:function(){},
    	query:function(sql)
    	{
    		if(arguments.length>1)
    		{
    			var arg=arguments[1];
    		}else var arg=[];
    
    		this.webdb_query.sqls.push([sql,arg]);
    		this.db.transaction(
    				this.webdb_query
    			);
    	}
    }
    


    使用方法:

    <!DOCTYPE html> 
    <html>
    <head>
    <meta charset="utf-8">
    <title>db test</title>
    </head>
    <script language="javascript" src="include/db.js"></script>
    <body>
    </head>
    <script language="javascript">
    function rand(min,max)
    {
        return Math.round(Math.random()*(max-min)+(min));
    }
    function db_cb(flag,rows,ist_id,ef_row)
    {
    	if(!flag)
    	{
    		alert("Error: \n"+rows);
    		return;
    	}
    	if(ist_id>0)
    	{
    		alert("ist_id="+ist_id);
    	}else if(ef_row>0){
    		alert("ef_row="+ef_row);
    	}else{
    		var len = rows.length;
    		if(len>0)
    		{
    			var tmp = "";
    			for(var a=0;a<len;a++)
    			{
    				var tmp1 = rows[a];
    				for(var b in tmp1)
    				{
    					tmp+="b["+a+"]["+b+"]="+tmp1[b]+"\n";
    				}
    			}
    			alert("tmp="+tmp);
    		}
    	}
    }
    
    var tbname = "t"+rand(11111,999999);
    document.write("<h1>"+tbname+"</h1>");
    var db=new webdb(db_cb,'test',1024);
    db.db_cb = db_cb;
    db.query('create TABLE '+tbname+'(id uniquee,name,age) ');
    db.query('insert into '+tbname+'(id,name,age) values(1,\'lein\',\'32\')');
    db.query('insert into '+tbname+'(id,name,age) values(2,\'lili\',\'25\')');
    db.query('insert into '+tbname+'(id,name,age) values(3,\'xx\',\'2\')');
    db.query('update '+tbname+' set name=? where id=?',['xiangxiang',3]);
    db.query('select * from '+tbname+'');
    
    </script>
    </body>
    </html>
    


    我的QQ群:

    PHPer&Webgame&移动开发,群号:95303036

  • 相关阅读:
    UVA
    计算几何 点和线
    CTU Open Contest 2017
    2018 Multi-University Training Contest 2
    2018 Multi-University Training Contest 1
    Nordic Collegiate Programming Contest (NCPC) 2016
    The 2016 ACM-ICPC Asia Shenyang Regional Contest
    The 2016 ACM-ICPC Asia Qingdao Regional Contest
    CCPC 2016-2017, Finals
    North American Invitational Programming Contest (NAIPC) 2016
  • 原文地址:https://www.cnblogs.com/lein317/p/5067631.html
Copyright © 2011-2022 走看看