QTP校验数据库中数据后台项目

2024-06-08 00:18

本文主要是介绍QTP校验数据库中数据后台项目,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

数据校验功能后台主要包括两个类:QTPCommonServlet.java和QTPCommonDao.java

其中QTPCommonServlet.java为:

package com.runqianapp.qtp;import java.io.PrintWriter;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.runqianapp.qtp.QTPCommonDao;
import com.geezn.exception.GeeznException;
import com.runqianapp.common.log.GEZLoggerManager;
import com.runqianapp.common.servlet.AbstractGezServlet;
/*** QTP数据检查Servlet* @author RAQ**/
public class QTPCommonServlet extends AbstractGezServlet {/**获取表中所有数据*/private static final String GET_ALL_DATA = "getAllData";/**检查删除操作结果*/private static final String CHECK_DELETE_RESULT = "checkDeleteResult";/*** 重写service()方法*/public void service(HttpServletRequest request, HttpServletResponse response){response.setContentType("text/html");PrintWriter out = null;try {request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");	out = response.getWriter();} catch (Exception e) {GeeznException ge;if(e instanceof GeeznException){ge = (GeeznException) e;}else{ge = new GeeznException(QTPCommonDao.MODULE_QTP, GEZLoggerManager.LOGLEVEL_ERROR,"设置字符格式、获取输出对象时,发生错误", e, "{}");}out.print(ge.getErrorMessageJson());}	String action = request.getParameter("action");if(GET_ALL_DATA.equals(action)){String sql = request.getParameter("sql");String sqlDateNumber = request.getParameter("sqlDateNumber");String allDatas = "";try {allDatas = QTPCommonDao.getAllDatas(sql,sqlDateNumber);} catch (GeeznException e) {GeeznException ge;if(e instanceof GeeznException){ge = (GeeznException) e;}else{ge = new GeeznException(QTPCommonDao.MODULE_QTP, GEZLoggerManager.LOGLEVEL_ERROR,"得到表中数据时,发生错误", e, "{}");}out.print(ge.getErrorMessageJson());}out.print(allDatas);}else if(CHECK_DELETE_RESULT.equals(action)){String sql = request.getParameter("sql");boolean deleteResult = false;try {deleteResult = QTPCommonDao.checkDeleteResult(sql);} catch (GeeznException e) {GeeznException ge;if(e instanceof GeeznException){ge = (GeeznException) e;}else{ge = new GeeznException(QTPCommonDao.MODULE_QTP, GEZLoggerManager.LOGLEVEL_ERROR,"检查删除动作结果时,发生错误", e, "{}");}out.print(ge.getErrorMessageJson());}out.print(deleteResult);}		}
}

QTPCommonDao.java为:

package com.runqianapp.qtp;import java.sql.*;
import com.geezn.exception.GeeznException;
import com.runqian.mis2.util.DBAccess;
import com.runqianapp.common.log.GEZLoggerManager;
/*** QTP通用数据库操作类* @author RAQ**/
public class QTPCommonDao {/*** 用于存储表字段名称,各字段名称之间用“;”分隔*/public static StringBuffer columns = new StringBuffer();/*** 用于存储当前操作表名*/public static String tableName = "";/*** 用于日志输出,模块标识*/public static final String MODULE_QTP = "qtpModule"; /**** 获取表字段名称及所有数据信息* @param sql 用户输入的查询sql语句* @param sqlDateNumber 查询数据条数(保留功能,目前暂不处理)* @return 表字段名称及所有链接信息 如:"short_link;...;link_name||/link1,...,百度@_@{};/link2,...,谷歌@_@{}"* 		   表字段名称与表数据之间用"||"分隔,各表字段名称之间与各表数据之间用";"分隔,每条表数据内部用"#"和"@_@"分隔* 		   其中"#"用来分隔表字段数据,"@_@"用来分隔表字段数据与json字符串* @throws GeeznException */public static synchronized String getAllDatas(String sql, String sqlDateNumber)throws GeeznException {getTableName(sql);  //解析出表名PreparedStatement pstmt = null;DBAccess dba = null;ResultSet rs = null;StringBuffer allDatas = new StringBuffer();  //方法返回的字符串try {dba = new DBAccess();rs = dba.executeQuery(sql);ResultSetMetaData rsmd = rs.getMetaData();int columnCount = rsmd.getColumnCount();/** 每次请求处理之前,先对columns进行一次清空 */	columns = columns.delete(0, columns.length());	/** 在返回的字符串里添加表字段信息 */for (int i = 1; i <= columnCount; i++) {allDatas.append(rsmd.getColumnName(i)).append(";");columns.append(rsmd.getColumnName(i)).append(";");}allDatas.deleteCharAt(allDatas.length() - 1);columns.deleteCharAt(columns.length() - 1);String[] column = columns.toString().split(";");allDatas.append("||");/** 在返回的字符串里添加表数据信息 */while (rs.next()) {for (int i = 0; i < column.length; i++) {allDatas.append(rs.getString(column[i])).append("#");}allDatas.deleteCharAt(allDatas.length() - 1);allDatas.append("@_@");  //以"@_@"符号分隔前台的数据字段信息和整条数据信息				/**生成每条数据的json字符串*/allDatas.append("{");for (int i = 0; i < column.length; i++) {allDatas.append("\"").append(column[i]).append("\"").append(":").append("\"").append(rs.getString(column[i])).append("\"").append(",");}allDatas.deleteCharAt(allDatas.length() - 1);allDatas.append("}");												allDatas.append(";");												}allDatas.deleteCharAt(allDatas.length() - 1);			} catch(Exception e){throw new GeeznException(QTPCommonDao.MODULE_QTP, GEZLoggerManager.LOGLEVEL_ERROR,"根据传入的sql获取数据时,发生错误", e,"{}");} finally {close(dba, pstmt, rs);}return allDatas.toString();}/*** 从用户输入的sql语句中解析出表名并存入变量tableName中* @param sql 用户输入的sql语句*/public static void getTableName(String sql){if (sql.contains("where") || sql.contains("WHERE")) {int start = 0;int end = 0;if (sql.contains("from")) {start = sql.indexOf("from");} else if (sql.contains("FROM")) {start = sql.indexOf("FROM");}if (sql.contains("where")) {end = sql.indexOf("where");} else if (sql.contains("WHERE")) {end = sql.indexOf("WHERE");}if (start == 0 || end == 0) {System.out.println("解析表名失败");} else {tableName = sql.substring(start + 5, end);}} else {int start = 0;if (sql.contains("from")) {start = sql.indexOf("from");} else if (sql.contains("FROM")) {start = sql.indexOf("FROM");}if (start == 0) {System.out.println("解析表名失败");} else {tableName = sql.substring(start + 5, sql.length());}}}/*** 判断某条数据是否已被成功删除方法* @param sql 查询删除数据的sql语句* @return  返回某条超链接是否已被成功删除 true:已被删除 false:没有被删除* @throws GeeznException*/	public static synchronized Boolean checkDeleteResult(String sql)throws GeeznException{boolean flag = true; //方法返回的字符串DBAccess dba = null;ResultSet rs = null;try{dba = new DBAccess();rs = dba.executeQuery(sql);while(rs.next()){flag = false;}}catch(Exception e){throw new GeeznException(QTPCommonDao.MODULE_QTP, GEZLoggerManager.LOGLEVEL_ERROR,"判断某条数据是否已被成功删除时,发生错误", e,"{}");}finally{close(dba, null, rs);}return flag;}/**关闭所有连接* @throws GeeznException */private static void close(DBAccess dba,Statement ps,ResultSet rs) throws GeeznException{try{if(rs!=null){rs.close();}if(ps!=null){ps.close();}if(dba!=null){dba.close();}}catch(Exception e){throw new GeeznException(QTPCommonDao.MODULE_QTP, GEZLoggerManager.LOGLEVEL_ERROR,"关闭所有连接时,发生错误", e,"{}");			}			}
}



 

这篇关于QTP校验数据库中数据后台项目的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040706

相关文章

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat