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,"{}");

}

}

}

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-09-21 09:26:35

QTP校验数据库中数据后台项目的相关文章

android/java 数据库中数据如何生成选择题

问题描述 android/java 数据库中数据如何生成选择题 现有数据库中数据形式是这样的:key 名字:translation 解释: 如何**随机**取出其中一条数据的key为题目,translation为一个正确选项,再取出另外3条数据的translation作为错误选项,生成选择题,并且正确选项会随机出现在ABCD任意位置? 哪位大神可以解答一下我的问题?提供一个思路...先谢谢啦~ 解决方案 首先获取随机题目:随机题目id可以使用这样获取int a=(int) (Math.rando

asp.net中登录页面用户名和密码与数据库中数据进行比对出错,求大神指导!!!!

问题描述 asp.net中登录页面用户名和密码与数据库中数据进行比对出错,求大神指导!!!! dr['AID']=112100011TextBox1.Text=1121000177 dr['apassword']=245fghTextBox2.Text=123456 dr['AID']=1121000177TextBox1.Text=1121000177 dr['apassword']= 123456TextBox2.Text=123456 用户名或密码不正确,请重新输入! 这是运行时页面打印出

Java 使用poi把数据库中数据导入Excel的解决方法_java

Java 利用poi把数据库中数据导入Excel 效果: 使用时先把poi包导入工程的path,注意只需要导入poi包即可,下载后有三个jar包 核心代码: 连接数据库:DBConnection.java 复制代码 代码如下: package org.xg.db;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;i

关于Mysql数据库中数据输入问题

关于数据库中数据输入问题 -------------------SELECT ... INTOOUTFILE 的 LOAD DATA INFILE 的逆操作问题. 一般我们都用insert into table_name values();来给数据表添加记录.这是一种方法. 当然也可以使用mysqlimport实用程序装载数据文件.其实它也是发送local data infile命令到服务器 而在输入大量数据的时候 ,我们可以用load data infile 语法来实现. 之前,我们需要先编辑

框架-JAVA问题:删除数据库中数据的代码,测试不会报错,但实际什么都删不了

问题描述 JAVA问题:删除数据库中数据的代码,测试不会报错,但实际什么都删不了 这些操作做完后,数据库里的t_product表中,id=2的数据依然在,不是刷新的问题,刷新也还在 解决方案 为什么你的三个函数保存.修改.删除方法调用sql的时候都没有传递sql参数值呢? 解决方案二: 调用mapper里面的sql代码的时候,把要删除的id传进去了吗?不应该是sqlsession.delete("",参数);吗? 解决方案三: 参数没带.sqlsession.delect带上id 解决

mfc vc6 0 sql 数据库-请问当SQL Server数据库中数据有更新的时候,如何通知到MFC上?

问题描述 请问当SQL Server数据库中数据有更新的时候,如何通知到MFC上? 编程环境VC6.0,在MFC对话框中添加了一些控件,并且能够显示数据库中内容, 使用的是CRecordSet类,读取完数据库后就调用Close关闭数据库了. 我想请问的是,如何实时的显示数据库内容? 或者当数据库数据有变更的时候才显示到 MFC的控件上? 解决方案 参考这个试试 SQL Server 2008 表数据改变后发送消息 http://blog.csdn.net/sliphades/article/de

怎么实现在ASP.NET中制作表格,并将数据库中数据定位到特定的单元格中,谢谢了

问题描述 怎么实现在ASP.NET中制作表格,并将数据库中数据定位到特定的单元格中,谢谢了 现须在ASP.NET的网页中显示报表,报表的格式如下(红框里的是固定不变的,绿框的数据从数据库调用).表格要求:表格样式不变,显示数据库里的数据. 之前尝试用repeater.Gridview控件但都不能将数据定位到特定单元格上.问各位大神,怎么实现这个功能.在下感激不尽! 图片说明 解决方案 GridView可以将数据定位到单元格上,只是你不能简单的数据绑定,你需要用循环配合gridview.rows[

java-spring框架下jsp脚本语言confirm脚本语言删除数据库中数据怎么做?

问题描述 spring框架下jsp脚本语言confirm脚本语言删除数据库中数据怎么做? spring框架下jsp脚本语言confirm脚本语言删除数据库中数据怎么做,具体说一说怎么写confirm脚本代码?求大神解答啊 解决方案 你的意思是点删除的时候弹出个确认对话框么?再跳一个Action实现真正的删除工作.还是想用ajax的方式实现无刷新删除-- 解决方案二: $(document).ready(function(){ //为注销用户超链接绑定click事件 $(".logoutid&qu

.net-用DataSet修改数据库中数据

问题描述 用DataSet修改数据库中数据 请问用DataSet修改数据库中数据: DataSet对象的数据表中的数据复制到DataTable中,之后修改DataTable中的数据,之后直接用SqlDataAdapter提交更新直接提交DataSet(sqld.Update())就可以了吗?这样改变了DataSet中的数据了吗? 求大神解答,初学者 解决方案 DataSet的作用是把数据库中的表中的数据都找出来,并在系统中自动为该数据找个内存存下来,在进行修改的时候只是把内存中的数据修改,并不会