package com.runqianapp.tableManager.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONException;
import org.json.JSONObject;
import com.runqian.report4.usermodel.IReport;
import com.runqianapp.dataManager.DataManager;
import com.runqianapp.tableManager.TableManager;
/**
* 数据表管理servlet
*
* 处理数据表管理所有的前段请求,包括:
* --检查表是否存在
* --创建新表
* --获取表结构信息
* --检查字段是否存在
* --表增加新字段
* --删除字段
* --修改字段、
* --获取此数据库支持的所有数据类型名称
*/
public class TableManagerServlet extends HttpServlet{
/**判断表是否已存在*/
private static final String TABLEEXIST = "tableExist";
/**修改表名*/
private static final String RENAMETABLE = "renameTable";
/**创建表*/
private static final String CREATETABLE = "createTable";
/**删除表*/
private static final String DELETETABLE = "deleteTable";
/**获得表的结构信息*/
private static final String GETTABLEINFO = "getTableInfo";
/**判断字段是否已经存在*/
private static final String COLUMNEXIST = "columnExist";
/**表增加新字段*/
private static final String ADDCOLUMN = "addColumn";
/**删除字段*/
private static final String DROPCOLUMN = "dropColumn";
/**修改字段定义*/
private static final String MODIFYCOLUMN = "modifyColumn";
/**获取此数据库支持的所有数据类型名称*/
private static final String GETTYPENAME = "getTypeName";
/**修改表数据*/
private static final String MODIFYDATA = "modifyData";
/**
* get方式的请求转交给post的方式处理
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
/**
* 处理前端所有请求
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
String action = request.getParameter("action");
String tableName = request.getParameter("tableName"); //得到数据表名参数
String columnName = request.getParameter("columnName");
/**声明数据表管理类对象*/
TableManager tableManager = new TableManager();
JSONObject jsResult = new JSONObject();
if(TABLEEXIST.equals(action)){
//调用判断表是否存在的方法
boolean result = tableManager.hasTable(tableName);
out.write(result+"");
out.close();
}else if(RENAMETABLE.equals(action)){
//调用修改表名的方法
String srcTableName = request.getParameter("srcTableName"); //得到源表名参数
String newTableName = request.getParameter("newTableName"); //得到新表名参数
StringBuffer resultMessage = new StringBuffer();
boolean result = false;
try{
result = tableManager.renameTable(srcTableName, newTableName);
resultMessage.append("{\"result\":\"").append(result).append("\"}");
}catch(Exception e){
e.printStackTrace();
resultMessage.append("{\"result\":\"").append(result).append("\",")
.append("\"errorMessage\":\"").append(e.getMessage()).append("\"}");
}
out.write(resultMessage.toString());
out.close();
}else if(CREATETABLE.equals(action)){
//调用创建表的方法
String jsonMessage = request.getParameter("tableInfo"); //得到表信息字符串
StringBuffer resultMessage = new StringBuffer();
boolean result = false;
try{
jsResult = new JSONObject(jsonMessage); //将表信息封装成json对象
result = tableManager.createTable(jsResult);
resultMessage.append("{\"result\":\"").append(result).append("\"}");
}catch(Exception e){
e.printStackTrace();
resultMessage.append("{\"result\":\"").append(result).append("\",")
.append("\"errorMessage\":\"").append(e.getMessage()).append("\"}");
}
out.write(resultMessage.toString());
out.close();
}else if(DELETETABLE.equals(action)){
//调用删除表的方法
String deleteTableName = request.getParameter("deleteTableName");//得到要删除表表名参数
StringBuffer resultMessage = new StringBuffer();
boolean result = false;
try{
result = tableManager.dropTable(deleteTableName);
resultMessage.append("{\"result\":\"").append(result).append("\"}");
}catch(Exception e){
e.printStackTrace();
resultMessage.append("{\"result\":\"").append(result).append("\",")
.append("\"errorMessage\":\"").append(e.getMessage()).append("\"}");
}
out.write(resultMessage.toString());
out.close();
}else if(GETTABLEINFO.equals(action)){
//获取表结构信息
jsResult = tableManager.getTableInfo(tableName);
out.write(jsResult.toString()); //结果添加到响应信息
out.close();
}else if(COLUMNEXIST.equals(action)){
//判断字段是否存在调用的方法
boolean isExist = true;
try {
isExist = tableManager.columnExist(tableName, columnName); //调用判断字段是否存在的方法
} catch (SQLException e) {
e.printStackTrace();
}
out.write(isExist+""); //结果添加到响应信息
out.close();
}else if(ADDCOLUMN.equals(action)){
//表中增加字段调用的方法
/**结果信息*/
StringBuffer result = new StringBuffer();
/**字段信息*/
JSONObject columnInfoObj = null;
/**是否成功增加字段,成功为true*/
boolean isAdd = false;
try {
//System.out.println(request.getParameter("columnInfo"));
columnInfoObj = new JSONObject(request.getParameter("columnInfo")); //请求中获取字段信息
isAdd = tableManager.addColumn(tableName, columnInfoObj); //调用增加字段方法
result.append("{");
result.append("\"result\":\""+isAdd+"\"");
result.append("}");
} catch (JSONException e) {
result.append("{");
result.append("\"result\":\""+isAdd+"\""+",");
result.append("\"errorMessage\":\""+e.getMessage()+"\"");
result.append("}");
e.printStackTrace();
} catch (SQLException e) {
result.append("{");
result.append("\"result\":\""+isAdd+"\""+",");
result.append("\"errorMessage\":\""+e.getMessage()+"\""+",");
result.append("\"errorCode\":\""+e.getErrorCode()+"\""+",");
result.append("\"sqlstate\":\""+e.getSQLState()+"\"");
result.append("}");
e.printStackTrace();
}
out.write(result.toString()); //结果添加到响应信息
out.close();
}else if(DROPCOLUMN.equals(action)){
//表中删除字段调用的方法
/**是否成功删除字段,成功为true*/
boolean idDrop = false;
/**结果信息*/
StringBuffer result = new StringBuffer();
try {
idDrop = tableManager.dropColumn(tableName, columnName); //调用删除字段方法
result.append("{");
result.append("\"result\":\""+idDrop+"\"");
result.append("}");
} catch (SQLException e) {
result.append("{");
result.append("\"result\":\""+idDrop+"\""+",");
result.append("\"errorMessage\":\""+e.getMessage()+"\""+",");
result.append("\"errorCode\":\""+e.getErrorCode()+"\""+",");
result.append("\"sqlstate\":\""+e.getSQLState()+"\"");
result.append("}");
e.printStackTrace();
}
//System.out.println(result.toString());
out.write(result.toString()); //结果添加到响应信息
out.close();
}else if(MODIFYCOLUMN.equals(action)){
//修改字段定义调用的方法
/**结果信息*/
StringBuffer result = new StringBuffer();
/**字段信息*/
JSONObject columnInfoObj = null;
/**修改字段是否成功,成功true*/
boolean isModify = false;
try {
columnInfoObj = new JSONObject(request.getParameter("columnInfo")); //请求中拿到字段信息
isModify = tableManager.modifyColumn(tableName, columnInfoObj); //调用修改字段方法
result.append("{");
result.append("\"result\":\""+isModify+"\"");
result.append("}");
} catch (JSONException e) {
result.append("{");
result.append("\"result\":\""+isModify+"\""+",");
result.append("\"errorMessage\":\""+e.getMessage()+"\"");
result.append("}");
e.printStackTrace();
} catch (SQLException e) {
result.append("{");
result.append("\"result\":\""+isModify+"\""+",");
result.append("\"errorMessage\":\""+e.getMessage()+"\""+",");
result.append("\"errorCode\":\""+e.getErrorCode()+"\""+",");
result.append("\"sqlstate\":\""+e.getSQLState()+"\"");
result.append("}");
e.printStackTrace();
}
out.write(result.toString()); //结果添加到响应信息
out.close();
}else if(GETTYPENAME.equals(action)){
//获取此数据库支持的所有数据类型名称调用此方法
/**数据库支持的所有数据类型名称*/
String TypeNames = "";
try {
TypeNames = tableManager.getTypeName(); //调用获取此数据库支持的所有数据类型名称方法
} catch (SQLException e) {
e.printStackTrace();
}
out.write(TypeNames);
out.close();
} else if ("modifyData".equals(action)) {
DataManager dm = new DataManager("mis2datasource", tableName);
IReport report = dm.createReport();
request.getSession().setAttribute("reportDefine", report);
request.getRequestDispatcher("/mis2/operateTable/showData.jsp").forward(request, response);
}
}
}