`

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代码,使数据库执行非预期的操作,如读取、修改或删除敏感信息。...

    .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语句进行性能分析。当开发人员编写或...

    Web项目中的SQL注入问题研究与防范方法.pdf

    在测试和验证阶段,将所提出的防范思路和方法应用在实际的Web项目中。测试结果表明,所构建的防范模型在实用性和安全性方面都表现较高。通过模型验证,可以确保Web应用程序能够有效抵御SQL注入攻击,提升应用整体的...

    基于Web的系统测试方法.ppt

    【基于Web的系统测试方法】 随着互联网的飞速发展,Web技术已经成为商业、教育、政府等领域不可或缺的一部分。...随着Web技术的不断发展,测试方法也需要不断更新和优化,以适应快速变化的Web环境。

    软件测试基础—Web测试方法和技巧.ppt

    软件测试基础—Web测试方法和技巧 本资源概括了软件测试基础,其中着重介绍了Web测试方法和技巧。下面是从该资源中提取的知识点: Web应用场景 * 简单的Web应用场景:没有交互、静态的简单网站 * 复杂的Web应用...

    sql.zip_web sql_web登录

    在本项目中,"sql.zip_web sql_web登录" 提供了一个关于...以上就是围绕"sql.zip_web sql_web登录"这个主题所涵盖的一些主要知识点,它们构成了一个Web登录系统的核心要素,并涉及到了Web开发和数据库管理的多个方面。

    模型驱动的Web应用SQL注入渗透测试.pdf

    标题《模型驱动的Web应用SQL注入渗透测试.pdf》和描述《模型驱动的Web应用SQL注入渗透测试.pdf》表明,本文是一篇专注于Web应用安全漏洞检测,特别是针对SQL注入漏洞进行渗透测试的研究论文。SQL注入攻击是Web应用中...

Global site tag (gtag.js) - Google Analytics