`
key232323
  • 浏览: 376435 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

web sql的推荐使用方法和测试

 
阅读更多

/**
* Begin class defination XPager : 分页逻辑类
*/
var XPager = Base.extend({
	// 参考groovy biz.db.Pager
	constructor : function(cp, npp, total){
		this.currentPage = cp;
		this.numPerPage = npp;

		this.rowCount = total;
	}, 

	currentPage : 1, 
	numPerPage : 20, 
	rowCount : 0, 

	pagiStyle : 'digg', 

	ll: null, 

	// changeCp
	callbackFun : '', 

	getPageNum : function() {
		var r = this.rowCount % this.numPerPage;
		var r2 = this.rowCount / this.numPerPage;
		var result = r == 0 ? r2 : r2 + 1;
		return Math.floor(result);
	},

	getStart : function(){
		return (this.currentPage - 1) * this.numPerPage;
	},

	getEnd : function(){
		if(this.rowCount < this.numPerPage || this.currentPage == this.getPageNum())
			return this.rowCount;
		else
			return this.currentPage * this.numPerPage;
	},

	hasNext : function(){
		return this.currentPage < this.getPageNum();
	},

	hasPre : function(){
		return this.currentPage > 1 && this.getPageNum() > 1;
	}, 
	
	lang : {
		pageNum: '总页数:', 
		currentPage: '当前页:', 
		totalCount: '总记录:'
	}, 

	// use mollio pagination template
	genHtml : function(){
		var tpl = '<p>' + 
			'{3}' + 
			'<span><strong>{2}</strong></span>' + 
			'</p><h4>{1} / {0}</h4>';

		var tpl2 = '<a href="javascript:void();" onclick="{1}">{0}</a>';

		var param0 = this.lang.pageNum + this.getPageNum();
		var param1 = this.lang.currentPage + this.currentPage;
		var param2 = this.lang.totalCount + this.rowCount;

		var param3 = '';
		var i = 1;
		for (; i <= this.getPageNum(); i++){
			param3 += tpl2.format(i, "XPager.changeCp('" + this.callbackFun + "', '" + i + "');");
		}

		tpl = tpl.format(param0, param1, param2, param3);
		return tpl;
	}, 

	// use yahoo pagination template
	getHtml2 : function(){
		var tpl = '<div class="' + this.pagiStyle + '">' + 
			'<span style="font-size: 11px; color: silver;">' + this.lang.pageNum + '{0}</span>' + 
			'{1}' + 
			'<span style="font-size: 11px; color: silver;">' + this.lang.totalCount + '<font color="red">{2}</font></span>' + 
			'</div>';


		var param0 = this.getPageNum();
		var param2 = this.rowCount;

		var param1 = '';
		var tplLink = '<a href="javascript:void();" onclick="{1}">{0}</a>';

		var i = 1;
		for (; i <= this.getPageNum(); i++){
			if(i == this.currentPage)
				param1 += '<span class="current">{0}</span>'.format(i);
			else
				param1 += tplLink.format(i, "XPager.changeCp('" + this.callbackFun + "', '" + i + "');");
		}

		tpl = tpl.format(param0, param1, param2);
		return tpl;		
	}, 

	dump : '' // 避免,结尾,在IE浏览器中语义错误
	},{

	changeCp: function(callbackFunName, pageNo){
		var jsStr = callbackFunName + '(' + pageNo + ')';
		eval(jsStr);
	}, 

	dump : '' // 避免,结尾,在IE浏览器中语义错误
});

/**
* Begin class defination XDB : Web sql辅助方法
*/
var XDB = {
	db: null, 

	init: function(dbName, version, dbDisplayName, size){
		if(window.openDatabase)
			this.db = openDatabase(dbName, version, dbDisplayName, size);
	}, 

	exe: function(sql, args, callback){
		if(!this.db){
			X.log('Web sql not support!');
			return;
		}

		this.db.transaction(function(tx){  
			tx.executeSql(sql, args, function(tx, results){
				if(callback)
					callback(results);
			}, function(tx, err){
				// SQLError
				X.log('Web sql execute error: ' + err.message);
			});
		});
	},

	trans: function(fn){
		if(!this.db){
			X.log('Web sql not support!');
			return;
		}

		this.db.transaction(fn);
	}, 

	// crud
	add: function(data, table){
		var keys = _.keys(data);
		var str1 = keys.join(',');
		var str2 = _.map(keys, function(it){return '?';}).join(',');

		var sql = 'insert into {0} ({1}) values ({2})';
		sql = sql.format(table, str1, str2);
		var args = _.values(data);

		this.exe(sql, args)
	}, 

	del: function(data, table){
		var keys = _.keys(data);
		var strClause = _.map(keys, function(it){
			return it + ' = ?';
		}).join(' and ');

		var sql = 'delete from {0} where {1}';
		sql = sql.format(table, strClause);
		var args = _.values(data);

		this.exe(sql, args)
	}, 

	update: function(data, dataClause, table){
		var strSet = _.map(_.keys(data), function(it){
			return it + ' = ?';
		}).join(', ');
		var argsSet = _.values(data);

		var strClause = _.map(_.keys(dataClause), function(it){
			return it + ' = ?';
		}).join(' and ');
		var argsClause = _.values(dataClause);

		var sql = 'update {0} set {1} where {2}';
		sql = sql.format(table, strSet, strClause);

		this.exe(sql, argsSet.merge(argsClause))
	}, 

	query: function(sql, args, callback){
		this.exe(sql, args, function(results){
			if(callback)
				callback(results.rows);
		});
	}, 

	pi: function(sql, args, cp, npp, callback){
		var pager = new XPager(cp, npp, 0);
		var countSql = 'select count(1) as rowCount from ({0})'.format(sql);
		var subSql = 'select * from ({0}) limit {1}, {2}'.format(sql, pager.getStart(), npp);

		var _this = this;
		this.query(countSql, args, function(rows){
			pager.rowCount = rows.item(0)['rowCount'];

			_this.query(subSql, args, function(rows){
				if(callback)
					callback(pager, rows);
			});
		});
	}, 

	dump : ''
};

 

下面是测试代码

$(function(){
			appendLi('*** *** *** *** *** *** *** *** *** *** *** *** XDB');
			appendLi('*** *** *** *** *** *** *** *** *** *** *** *** XDB');
		
			runTest('XDB all', true, function(){
				XDB.init('test', '0.1', 'TestDB', 1024 * 10);
				XDB.exe('create table if not exists x(name varchar(30))');
				XDB.trans(function(tx){
					tx.executeSql('delete from x');
					var i = 0;
					for(; i < 10; i++){
						var sql = "insert into x(name) values(?)";
						tx.executeSql(sql, ['Kerry' + i]);
					}
				});

				XDB.query('select * from x', null, function(rows){
					var len = rows.length;
					var i = 0;
					for(; i < len; i++){
						X.log(rows.item(i)['name']);
					}
				});

				XDB.pi('select * from x', null, 3, 20, function(pi, rows){
					X.log(pi.rowCount);

					var len = rows.length;
					var i = 0;
					for(; i < len; i++){
						X.log(rows.item(i)['name']);
					}
				});

				XDB.update({name: 'XXX0'}, {name: 'Kerry0'}, 'x');
				XDB.query('select * from x where name = ?', ['XXX100'], function(rows){
					X.log(rows.length);
				});
				XDB.del({name: 'XXX0'}, 'x');

				return true;
			});

		});
 
分享到:
评论

相关推荐

    web测试之安全测试方法:sql注入方法

    SQL注入漏洞通常是由于Web应用程序未能对用户输入的数据进行充分验证和转义,导致这些数据被当作SQL命令的一部分直接执行。攻击者可以通过提交恶意SQL代码,使数据库执行非预期的操作,如读取、修改或删除敏感信息。...

    websql-SQL资源

    标题“websql-SQL资源”表明了这个资源包的主要内容是关于websql和SQL的相关资源。websql是一种在浏览器中本地存储和操作结构化...开发者可以利用这个资源包快速搭建开发环境,进行websql和SQL相关的开发和测试工作。

    web应用程序测试方法和测试技术详述.pdf

    Web应用程序测试是确保Web应用能够按照预期工作的关键环节...本文概述了Web应用程序测试的主要方法和测试技术,希望能够帮助测试人员提高测试效率和质量,确保Web应用在各种环境和用户需求下的稳定性、安全性和可用性。

    .NET6WebAPI使用Sqlserver+JWT增删改查

    综上所述,".NET6WebAPI使用Sqlserver+JWT增删改查"项目涵盖了现代Web开发的多个重要方面,包括API设计、数据库交互、身份验证和安全实践,是学习和实践.NET6开发的宝贵资源。通过这个项目,开发者不仅可以掌握ASP...

    web安全性测试之sql注入入门篇

    根据攻击的目的和方法,SQL 注入可以分为以下几种类型: * Blind SQL Injection:攻击者不知道服务器的数据库结构和数据,但可以通过提交特殊的 SQL 语句来获取信息。 * Error-based SQL Injection:攻击者可以通过...

    sql数据库使用方法

    ### SQL数据库使用方法 #### 1. 配置文件路径 在使用SQL数据库时,通常需要通过配置文件来指定数据库的连接参数和其他设置。以下是一些常见的配置文件路径示例: - **`D:\Tomcat6\webapps\DownServer\WEB-INF\...

    web测试流程和web测试用例编写方法和web测试点

    ### Web测试流程与测试用例编写方法详解 #### 一、引言 随着互联网技术的飞速发展,Web应用已成为日常生活中不可或缺的一部分。基于Web的应用系统不仅需要具备强大的功能,还需要确保良好的用户体验、高可靠性和...

    web安全性测试sql注入高级篇

    ### Web安全性测试SQL注入高级篇知识点详解 #### 一、SQL Server高级注入技巧 ##### 1. 利用系统表和存储过程 - **利用`xp_cmdshell`存储过程** - **示例1**: `http://Site/url.asp?id=1;exec master..xp_cmd...

    WEB安全测试分类及防范测试方法.docx

    WEB安全测试是确保网站应用程序免受恶意攻击的关键环节。...综上所述,Web安全测试涵盖广泛的测试领域,每种测试方法都有其特定的防范措施。通过实施这些测试,可以有效增强Web应用的安全性,降低被攻击的风险。

    Web的系统测试方法

    5. 数据库测试:针对使用数据库的Web应用,需测试数据一致性(确保用户输入的正确性)和输出错误(如网络延迟导致的显示问题)。使用SQL进行查询和数据验证是必不可少的。 二、性能测试 1. 连接速度测试:模拟各种...

    Web网站测试方法指导

    Web网站测试方法是确保Web系统质量的关键步骤,它涵盖了多个层面的验证,以确保系统能够稳定、安全且高效地运行。Web测试与传统软件测试的主要区别在于,它不仅需要验证功能是否符合设计要求,还需要考虑多用户环境...

    Web测试方法

    Web测试是针对基于Web的应用程序进行的一系列验证过程,旨在确保系统的功能、性能、安全性和用户体验达到预期标准。...随着技术的发展,测试方法也在不断更新和完善,以应对更复杂、多变的Web环境。

    Web安全测试测试计划编写.pdf

    2. 测试范围:确定测试的范围,包括测试的对象、测试的方法和测试的环境。 测试范围是指测试的对象、测试的方法和测试的环境。例如,测试的对象可能是Web应用程序的登录页面、注册页面或支付页面等。测试的方法可能...

    sql测试工具用于测试sql语句的性能

    SQL测试工具能够帮助我们评估和优化SQL语句的性能,确保数据查询的效率和系统的稳定性。本文将详细讲解如何使用这些工具以及它们的重要性。 首先,SQL测试工具的核心功能是对SQL语句进行性能分析。当开发人员编写或...

Global site tag (gtag.js) - Google Analytics