qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

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

          posted on 2014-05-13 16:22 順其自然EVO 閱讀(298) 評論(0)  編輯  收藏 所屬分類: qtp

          <2014年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 毕节市| 拜城县| 临漳县| 闸北区| 榕江县| 盘山县| 祁阳县| 田阳县| 依兰县| 涟水县| 巢湖市| 安远县| 无锡市| 阿拉尔市| 尚义县| 桃园市| 乐安县| 张家川| 泸州市| 华安县| 武威市| 三门县| 道孚县| 乌鲁木齐市| 陆川县| 宁夏| 梧州市| 建昌县| 福贡县| 昌江| 徐水县| 宜阳县| 修文县| 麻栗坡县| 娱乐| 高碑店市| 陵川县| 临漳县| 荃湾区| 昂仁县| 南溪县|