开发者社区> 青衫无名> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
第三十八章 构建数据库应用程序 - 处理表单提交请求
第三十八章 构建数据库应用程序 - 处理表单提交请求
0 0
数据库基础和断点调试
数据库基础和断点调试
0 0
软件开发中的数据库测试内容与方法
随着网络信息技术的发展, 计算机软件受到广泛关注与重视, 已经形成了良好的开发模式, 可以通过开发研究的方式, 全面提升计算机软件的使用效果, 充分发挥其在计算机中的应用优势。在计算机软件开发期间, 需要使用数据库测试技术, 及时发现其中存在的问题, 采用合理的措施解决问题, 以此提升软件的运行水平。
0 0
Confluence 6 数据库整合的方法 1:基本流程
步骤 1:对你的插件进行记录 对你近期在 Confluence 中安装和启用的插件进行记录,这你可以在后期对插件进行重新安装或者调整。
1267 0
让你提前认识软件开发(26):数据库脚本的注释
第2部分 数据库SQL语言 数据库脚本的注释   1. 概述         注释在程序语言的编写中占有非常重要的地位。优美的、得当的注释不仅有助于研发人员理解程序,还能够提高编程效率(进而提高办事效率)。
985 0
【2011-04-07】不要在界面上对数据库进行改动
背景:   在900W 的表上加 identity 字段 原因:   企业管理器一直无法应用,cpu占用100%       关闭企业管理器之后,导致数据库无法访问   重启数据库服务,数据库服务只能关闭无法重启 结果:   重启服务器 结论:   不要在界面上修改结构,特别是企业...
410 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
阿里云数据库案例集下载
立即下载
高可用数据库的搭建与备份恢复策略验证实战
立即下载
面向失败设计
立即下载