QTP校驗數(shù)據(jù)庫中數(shù)據(jù)后臺項目
數(shù)據(jù)校驗功能后臺主要包括兩個類: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數(shù)據(jù)檢查Servlet * @author RAQ * */ public class QTPCommonServlet extends AbstractGezServlet { /**獲取表中所有數(shù)據(jù)*/ 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,"設置字符格式、獲取輸出對象時,發(fā)生錯誤", 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,"得到表中數(shù)據(jù)時,發(fā)生錯誤", 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,"檢查刪除動作結果時,發(fā)生錯誤", 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通用數(shù)據(jù)庫操作類 * @author RAQ * */ public class QTPCommonDao { /** * 用于存儲表字段名稱,各字段名稱之間用“;”分隔 */ public static StringBuffer columns = new StringBuffer(); /** * 用于存儲當前操作表名 */ public static String tableName = ""; /** * 用于日志輸出,模塊標識 */ public static final String MODULE_QTP = "qtpModule"; /*** * 獲取表字段名稱及所有數(shù)據(jù)信息 * @param sql 用戶輸入的查詢sql語句 * @param sqlDateNumber 查詢數(shù)據(jù)條數(shù)(保留功能,目前暫不處理) * @return 表字段名稱及所有鏈接信息 如:"short_link;...;link_name||/link1,...,百度@_@{};/link2,...,谷歌@_@{}" * 表字段名稱與表數(shù)據(jù)之間用"||"分隔,各表字段名稱之間與各表數(shù)據(jù)之間用";"分隔,每條表數(shù)據(jù)內(nèi)部用"#"和"@_@"分隔 * 其中"#"用來分隔表字段數(shù)據(jù),"@_@"用來分隔表字段數(shù)據(jù)與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("||"); /** 在返回的字符串里添加表數(shù)據(jù)信息 */ 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("@_@"); //以"@_@"符號分隔前臺的數(shù)據(jù)字段信息和整條數(shù)據(jù)信息 /**生成每條數(shù)據(jù)的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,"根據(jù)傳入的sql獲取數(shù)據(jù)時,發(fā)生錯誤", 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()); } } } /** * 判斷某條數(shù)據(jù)是否已被成功刪除方法 * @param sql 查詢刪除數(shù)據(jù)的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,"判斷某條數(shù)據(jù)是否已被成功刪除時,發(fā)生錯誤", 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,"關閉所有連接時,發(fā)生錯誤", e,"{}"); } } } |
posted on 2014-05-13 16:22 順其自然EVO 閱讀(298) 評論(0) 編輯 收藏 所屬分類: qtp