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



 

原文地址:https://www.cnblogs.com/yjbjingcha/p/6952656.html