您的位置:首页 > 数据库

Web Sql Database 操作类,将查询语句作为参数传入。

2012-04-03 16:04 411 查看
因为个人想开发 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐