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/
相关文章
|
3月前
|
SQL 开发框架 .NET
10分钟系列:NetCore3.1+EFCore三步快速完成数据库交互
10分钟系列:NetCore3.1+EFCore三步快速完成数据库交互
|
5月前
|
JSON 小程序 数据库
小程序批量导入excel数据,云开发数据库导出cvs乱码解决方案
小程序批量导入excel数据,云开发数据库导出cvs乱码解决方案
271 0
|
9月前
|
SQL 存储 程序员
【数据库】C#创建项目简单开发实现数据库表记录迁移功能
在实际项目中,很大可能会遇到数据迁移的情况 特别是对于系统升级或者旧表转移到新表,新旧表很可能是字段都不一样的情况,本篇文章就是在两个不同数据库不同表之间数据整合 同时也回顾下ADO.NET的ORM框架基础知识
158 0
|
12月前
|
SQL 存储 Oracle
Flyway数据库脚本管理工具使用经验
在常见的敏捷开发过程中,迭代的更新频繁出现,每个迭代数据库脚本也经常会更新,为了更好地管理项目中的数据库脚本,下面为大家介绍一款数据库脚本管理工具Flyway,希望对大家有帮助!
Flyway数据库脚本管理工具使用经验
|
机器学习/深度学习 存储 SQL
数据库基础和断点调试
数据库基础和断点调试
95 0
|
JSON 前端开发 API
不用一行代码,用 API 操作数据库,你信吗(下)
数据库的重要性不言而喻,但是数据库操作起来却不容易,需要用到各种管理工具,各种不同的连接方式,如果有方便的,屏蔽不同数据库细节的工具该多好,功夫不负有心人,我还真找了这样一个工具,不仅支持多种数据库,更厉害的是,不用为适配写一行代码,来了解下吧
85 0
|
Oracle 关系型数据库 MySQL
不用一行代码,用 API 操作数据库,你信吗(上)
数据库的重要性不言而喻,但是数据库操作起来却不容易,需要用到各种管理工具,各种不同的连接方式,如果有方便的,屏蔽不同数据库细节的工具该多好,功夫不负有心人,我还真找了这样一个工具,不仅支持多种数据库,更厉害的是,不用为适配写一行代码,来了解下吧
152 0
不用一行代码,用 API 操作数据库,你信吗(上)
|
存储 安全 测试技术
软件开发中的数据库测试内容与方法
随着网络信息技术的发展, 计算机软件受到广泛关注与重视, 已经形成了良好的开发模式, 可以通过开发研究的方式, 全面提升计算机软件的使用效果, 充分发挥其在计算机中的应用优势。在计算机软件开发期间, 需要使用数据库测试技术, 及时发现其中存在的问题, 采用合理的措施解决问题, 以此提升软件的运行水平。
|
SQL 关系型数据库 数据库
|
XML 数据库 数据格式
Confluence 6 数据库整合的方法 1:基本流程
步骤 1:对你的插件进行记录 对你近期在 Confluence 中安装和启用的插件进行记录,这你可以在后期对插件进行重新安装或者调整。
1476 0
推荐文章
更多