清空mysql指定库里所有表数据-自动删除所有表,有外键约束的表优先删除

由于要清空数据库数据 ,手动非常麻烦。网上找了一下,有一个Oracle的,参照它,在其上修改一下用于Mysql,把代码奉献如下:

相关连接:

清空mysql指定库里所有表数据

自动删除所有表,有外键约束的表优先删除

还差一个SQLSERVER 版,那个弄出来了,通知俺一下,感觉这个东西还蛮有用的。

代码如下:

package com.jtsite.DAOJDBC;

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 Connection getConnection(){

try {

Class.forName( "com.mysql.jdbc.Driver").newInstance();

//String url= "jdbc:oracle:thin:@10.45.10.177:1521:highway";

String url= "jdbc:mysql://localhost:3306/laidong8v5?useUnicode=true&characterEncoding=utf-8";

String user= "java";

String password= "java";

schema = user;

conn = DriverManager.getConnection(url,user,password);

return conn;

} catch (InstantiationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

/**

* 获得该用户的所有表,并删除表(除了要过滤的表)

*/

private static void findDeleteTableSQL(){

if(conn!=null){

try {

stmt=conn.createStatement();

String sql = "show TABLES";

//找到该链接用户的所有表

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()){

String tabName = rs.getString(1);

//getString("table_name");

//如果map中包含了表名,说明已经删除过了

//如果filterMap中包含了表名,则不删除

if(!map.containsKey(tabName)&&!filterMap.containsKey(tabName)){

printDeleteTableSQL(tabName);

}

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

/**

*

* 删除表,并将删除表的语句输出到控制台(记录后方便在数据库客户端执行)

* @param l

* @param tableName

* @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());

}

}

/**

* 删除通过外键约束找到的有子记录的表

* @param fk_constraints

*/

private static void deleteTableNameFromFK(String fk_constraints){

String sql = "select table_name from information_schema.REFERENTIAL_CONSTRAINTS where constraint_schema='laidong8v5' and constraint_name='"+fk_constraints+"'";

try {

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()){

String tabN = rs.getString("table_name");

printDeleteTableSQL(tabN);//递归

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

* 初始化需要过滤表的集合(该表如果是别的表的外键关联表也有可能被删除)

*/

private static void initFilterMap(){

String[] tables = {"ETC_USER","etc_dic_data","MENU"};

for (int j = 0; j < tables.length; j++) {

filterMap.put(tables[j].toUpperCase(),null);

}

}

public static void main(String[] args) {

getConnection();

//initFilterMap();//初始化不需要删除的表

//删除该用户下所有表(除了需要过滤的),并获得删除语句

findDeleteTableSQL();

//删除某一个表(有外键约束的表将先删除),并获得删除语句

//printDeleteTableSQL("obu_mast");

}

}

oracle删除库里的所有表,清空mysql指定库里全部表数据-自动删除所有表,有外键约束的表优先删除...相关推荐

  1. Oracle外键约束如何同时更新,SQL与ORACLE的外键约束-级联更新和删除

    /* SQL与ORACLE的外键约束--级联删除 最近软件系统中要删除一条记录,就要关联到同时删除好多张表,他们之间还存在着约束关系.所以考虑到在创建表时加上约束关系,具体如下: SQL的外键约束可以 ...

  2. SQL外键约束多表查询级联删除子查询

    文章目录 一.外键 1.创建外键约束 2.删除外键约束 3.外键约束提示 二.级联删除 三.多表查询 1.笛卡尔积 2.内连接查询 1.隐式内连接 2.显示内连接 3.外连接查询 1.左外连接 2.右 ...

  3. 外键mysql缺省级联_mysql的外键约束级联修改和删除整理

    这里先把从别处找来的资料放到这里,然后再总结下需要注意的地方 InnoDB中对外键约束定义的语法看起来如下: [CONSTRAINT symbol] FOREIGN KEY [id] (index_c ...

  4. Mysql外键约束的创建与删除

    在Mysql中使用外键,可以有效地将多个表格的数据"联动"起来,打破独立状态,互相影响. 文章目录 创建表时创建外键 给存在的表添加外键 删除外键约束 创建表时创建外键 创建两个表 ...

  5. PHPAdmin添加外键约束(建立表-表之间的关系)

    在使用PHPAdmin建立数据库之后,要添加外键约束,即建立表与表之间(字段之间的联系) 首先在建立表的过程中也写需要注意的点 1.设置主键 2.有可能会用到的关联字段要记得设置唯一性 3.将所有要建 ...

  6. MySQL笔记——外键约束和表关系(一对一,多对一,多对多)

    一.外键约束 概念:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性.语法:(1)添加约束-- 创建表是添加外键约束CREATE TABLE 表名(列名 数据类型,-[CONSTRAINT ...

  7. MYSQL外键约束和表关联

    1. 外键约束 约束 : 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.关联性 foreign key 功能 : 建立表与表之间的某种约束的关系,由于这种关系的存在,能够让 ...

  8. sql 外键约束【表关系绑定】

    外键 外键必须是表中的一个字段但不一定是该表的主键,但要对应的必须是另一张表的主键,外键的主要作用就是啊要保持数据的完整性,定义外键后不允许删除在另外一张表中具有关联关系的行[一条数据]. 主表(父表 ...

  9. mysql 有外键 怎么插入数据_外键约束的表怎么插入数据

    有外键的情况应该先添加主表数据,再添加副表数据. 如:有以下两张表 班级表: CLASSID NAME 1 一班 2 二班 学生表: SID NAME CLASSID 1 张三 1 2 李四 1 3 ...

最新文章

  1. Spring Cloud Feign的文件上传实现
  2. 当网站遇到黑链时该如何进行处理?
  3. 两个整形变量,不用中间变量进行替换!
  4. 按照这步骤来刷题,两个月你亦能成为王者
  5. 重磅发布 | 30+ 阿里巴巴云原生「顶流」,给你一堂《云原生技术实践公开课》
  6. 计算机系统崩溃重新装机,当计算机系统崩溃时如何用U盘重新安装Win7系统
  7. torque安装笔记
  8. Storm 的可靠性保证测试
  9. Golang笔记——方法
  10. WebView 简介
  11. 04号团队-团队任务3:每日立会(2018-11-28)
  12. URAL 1132 Square Root(二次剩余定理)题解
  13. 软件设计师教程(第5版)- 前言和目录
  14. C++设计一个长方形类
  15. c# 指定打开某个路径下的CMD_Windows小技巧 批处理文件实现目录下文件批量打包压缩...
  16. 【Selenium】控制当前已经打开的 chrome浏览器窗口
  17. springboot发送邮箱(阿里云、QQ邮箱)
  18. C盘扩容 ~直接磁盘管理器不能扩展~bitlocker加密解除
  19. bp暴力破解(转载)
  20. php的数组、排序、查找

热门文章

  1. 华为鸿蒙乌鸦快爷,华为鸿蒙第一批名单
  2. matlab 轴gui,MatlabüGUI学习笔记(4)——公共对象属性的轴,MatlabGUI,四,常用,之,Axes...
  3. python 方向键控制代码_Python控制鼠标键盘代码实例
  4. java shapes_Java Overlaping Shapes – 错误的重叠形状行为
  5. 响应式 Web 设计 - 媒体查询
  6. MYSQL中的日期转换
  7. poj2481树状数组解二维偏序
  8. JPA学习笔记二——Hello World
  9. MyBatis基本例子-实现增删改查
  10. 正整数和小数的正则写成自定义插件