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也通过了)
另外提醒下想自己写的朋友,数据库操作是异步的,你很有可能无法立即查询到你插入的数据,我就是因为这个原因搞了好久。
使用方法:
我的QQ群:
PHPer&Webgame&移动开发,群号:95303036
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
相关文章推荐
- Web Sql Database 操作类,将查询语句作为参数传入。
- sql语句模糊查询并且要传入参数
- mybatis sql in 查询(mybatis sql语句传入参数是list)mybatis中使用in查询时in怎么接收值
- 执行多条SQL语句,实现数据库事务(不可传入Sql参数)
- mybatis如何直接 执行传入的任意sql语句 并按照顺序取出查询的结果集
- 导入外部数据+SQL语句的办法不支持参数查询,不过可以通过子查询进行模拟
- MyBatis: SQL语句中传入单个String类型的参数的获取
- SQL优化 查询语句中,用 inner join 作为过滤条件和用where作为过滤条件的区别
- 使用SQL查询语句时,数组动态赋值SQL IN ()作为条件条件一个
- SQL语句--查询结果作为条件与另一张表进行条件查询
- [Database]创建存储过程并在ASP.NET中的调用带参数的存储过程与及调用带参数的SQL语句对比
- 对sql的查询语句做成对象式,简单实现。查询参数实现一
- DB2数据库(Database)常用SQL查询(SELECT语句)命令
- SSM Mapper.xml 数组和集合作为 sql 语句 参数
- 前方高能!mysql巨坑之web程序传入中文参数查询无结果
- 使用SQL查询语句时,数组动态赋值SQL IN ()作为条件条件一个
- 拼接字符串sql语句查询[WEB学习实例]
- 【转】使用sp_executesql执行动态SQL语句,同时向里面传入参数。
- 前台传入多个参数(数组格式),拼接成字符串中间用逗号隔开,传入到sql中用in查询.
- 执行多条SQL语句,执行数据库事务(可传入Sql参数)