package eb.controller.core;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.UnavailableException;
import com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException;
/**
@author Bicashy,fencer911(for Mysql Version)
*/
public class TableOperate {
static Statement stmt = null;
static Connection conn = null;
static Map map = new HashMap(); //用来保存已经删除了的表的集合
static Map filterMap = new HashMap(); //用来保存需要过滤的表的集合
static String schema ;
/**
/**
/**
@return
*/
private static void printDeleteTableSQL(String tableName){
String sql = "DELETE FROM "+tableName.toUpperCase();
try {
stmt=conn.createStatement();
System.out.println(sql+";");
stmt.execute(sql);
stmt.close();
//将删除语句输出到控制台
map.put(tableName,null);
} catch (MySQLIntegrityConstraintViolationException e) {
// TODO Auto-generated catch block
String error = e.toString();
System.out.println(error);
int p1=error.indexOf("(");
int p2=error.indexOf("FOREIGN KEY");
error=error.substring(p1, p2);
int p3=error.indexOf("CONSTRAINT");
error=error.substring(p3);
error=error.replaceAll("CONSTRAINT", "").replaceAll(" ", "").replaceAll("`", "");
//截取错误信息得到外键约束名称
String fk_constraints =error;
System.out.println("fk_constraints"+fk_constraints);
deleteTableNameFromFK(fk_constraints);
//删除外键约束表后,就可以将本表删掉
printDeleteTableSQL(tableName);
}catch (Exception e) {
System.out.println(e.toString());
}
}
/**
/**
public static void main(String[] args) {
getConnection();
//initFilterMap();//初始化不需要删除的表
//删除该用户下所有表(除了需要过滤的),并获得删除语句
findDeleteTableSQL();
//删除某一个表(有外键约束的表将先删除),并获得删除语句
//printDeleteTableSQL("obu_mast");
}
}
在外面看到,试了之后发现它把所有的表全都删除了,现在不知道怎么添加过滤的表,该怎么写。
首先:你的filterMap 要不为空,要注意表名大小写是否匹配
其次:在findDeleteTableSQL方法中删除表的时候,判断表名是否在你的filterMap中存在,存在就不执行删除操作。
mysql默认会有一些自带的表,可以查询用户和表的关联关系。先从select语句开始,查出某个用户下的所有表,然后再改成删除语句呗。
直接网上找到SQL,改写,到数据库工具中校验。