zoukankan      html  css  js  c++  java
  • 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,"{}");			
    		}			
    	}
    }



     

  • 相关阅读:
    广域网(ppp协议、HDLC协议)
    0120. Triangle (M)
    0589. N-ary Tree Preorder Traversal (E)
    0377. Combination Sum IV (M)
    1074. Number of Submatrices That Sum to Target (H)
    1209. Remove All Adjacent Duplicates in String II (M)
    0509. Fibonacci Number (E)
    0086. Partition List (M)
    0667. Beautiful Arrangement II (M)
    1302. Deepest Leaves Sum (M)
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6952656.html
Copyright © 2011-2022 走看看