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/
相关文章
|
30天前
|
存储 Oracle 关系型数据库
Dataphin常见问题之想要周期执行任务如何解决
Dataphin是阿里云提供的一站式数据处理服务,旨在帮助企业构建一体化的智能数据处理平台。Dataphin整合了数据建模、数据处理、数据开发、数据服务等多个功能,支持企业更高效地进行数据治理和分析。
|
1月前
|
NoSQL Java 数据库
【问题篇】springboot项目通过数据库限制实例端口号
【问题篇】springboot项目通过数据库限制实例端口号
19 0
|
1月前
|
SQL 开发框架 JavaScript
在 Vue 中进行数据持久化时,有哪些常用的数据库框架?
在 Vue 中进行数据持久化时,有哪些常用的数据库框架?
49 3
|
1月前
|
存储 数据管理 数据处理
数据之光:探索数据库技术的演进之路
数据之光:探索数据库技术的演进之路
60 1
|
1月前
|
存储 运维 关系型数据库
数据的力量:构筑现代大型网站之数据库基础与应用
数据的力量:构筑现代大型网站之数据库基础与应用
49 0
|
1月前
|
SQL Java 数据库连接
从来没想到我们会扒拉nohup文件去找我们想要的数据,然后往数据库中添加。。。...
从来没想到我们会扒拉nohup文件去找我们想要的数据,然后往数据库中添加。。。...
17 0
|
1月前
|
NoSQL Java 数据库连接
使用Java实现从数据库查出数据存入Redis,并在查询时先查Redis,如果Redis中没有数据再从数据库中读取
使用Java实现从数据库查出数据存入Redis,并在查询时先查Redis,如果Redis中没有数据再从数据库中读取
355 1
|
6天前
|
SQL 监控 druid
Druid数据库连接池简介及应用推广(老项目翻出来做下记录)
Druid数据库连接池简介及应用推广(老项目翻出来做下记录)
|
6天前
|
存储 关系型数据库 MySQL
如何处理爬取到的数据,例如存储到数据库或文件中?
处理爬取的数据,可存储为txt、csv(适合表格数据)或json(适合结构化数据)文件。若需存储大量数据并执行复杂查询,可选择关系型(如MySQL)或非关系型(如MongoDB)数据库。以MySQL为例,需安装数据库和Python的pymysql库,创建数据库和表,然后编写Python代码进行数据操作。选择存储方式应考虑数据类型、数量及后续处理需求。
14 1
|
7天前
|
SQL 关系型数据库 MySQL
关系型数据库插入数据的语句
使用SQL的`INSERT INTO`语句向关系型数据库的`students`表插入数据。例如,插入一个`id`为1,`name`为&#39;张三&#39;,`age`为20的记录:`INSERT INTO students (id, name, age) VALUES (1, &#39;张三&#39;, 20)。如果`id`自增,则可简化为`INSERT INTO students (name, age) VALUES (&#39;张三&#39;, 20)`。
7 2

热门文章

最新文章