oracle删除库里的所有表,清空mysql指定库里全部表数据-自动删除所有表,有外键约束的表优先删除...
清空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指定库里全部表数据-自动删除所有表,有外键约束的表优先删除...相关推荐
- Oracle外键约束如何同时更新,SQL与ORACLE的外键约束-级联更新和删除
/* SQL与ORACLE的外键约束--级联删除 最近软件系统中要删除一条记录,就要关联到同时删除好多张表,他们之间还存在着约束关系.所以考虑到在创建表时加上约束关系,具体如下: SQL的外键约束可以 ...
- SQL外键约束多表查询级联删除子查询
文章目录 一.外键 1.创建外键约束 2.删除外键约束 3.外键约束提示 二.级联删除 三.多表查询 1.笛卡尔积 2.内连接查询 1.隐式内连接 2.显示内连接 3.外连接查询 1.左外连接 2.右 ...
- 外键mysql缺省级联_mysql的外键约束级联修改和删除整理
这里先把从别处找来的资料放到这里,然后再总结下需要注意的地方 InnoDB中对外键约束定义的语法看起来如下: [CONSTRAINT symbol] FOREIGN KEY [id] (index_c ...
- Mysql外键约束的创建与删除
在Mysql中使用外键,可以有效地将多个表格的数据"联动"起来,打破独立状态,互相影响. 文章目录 创建表时创建外键 给存在的表添加外键 删除外键约束 创建表时创建外键 创建两个表 ...
- PHPAdmin添加外键约束(建立表-表之间的关系)
在使用PHPAdmin建立数据库之后,要添加外键约束,即建立表与表之间(字段之间的联系) 首先在建立表的过程中也写需要注意的点 1.设置主键 2.有可能会用到的关联字段要记得设置唯一性 3.将所有要建 ...
- MySQL笔记——外键约束和表关系(一对一,多对一,多对多)
一.外键约束 概念:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性.语法:(1)添加约束-- 创建表是添加外键约束CREATE TABLE 表名(列名 数据类型,-[CONSTRAINT ...
- MYSQL外键约束和表关联
1. 外键约束 约束 : 约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性.关联性 foreign key 功能 : 建立表与表之间的某种约束的关系,由于这种关系的存在,能够让 ...
- sql 外键约束【表关系绑定】
外键 外键必须是表中的一个字段但不一定是该表的主键,但要对应的必须是另一张表的主键,外键的主要作用就是啊要保持数据的完整性,定义外键后不允许删除在另外一张表中具有关联关系的行[一条数据]. 主表(父表 ...
- mysql 有外键 怎么插入数据_外键约束的表怎么插入数据
有外键的情况应该先添加主表数据,再添加副表数据. 如:有以下两张表 班级表: CLASSID NAME 1 一班 2 二班 学生表: SID NAME CLASSID 1 张三 1 2 李四 1 3 ...
最新文章
- Spring Cloud Feign的文件上传实现
- 当网站遇到黑链时该如何进行处理?
- 两个整形变量,不用中间变量进行替换!
- 按照这步骤来刷题,两个月你亦能成为王者
- 重磅发布 | 30+ 阿里巴巴云原生「顶流」,给你一堂《云原生技术实践公开课》
- 计算机系统崩溃重新装机,当计算机系统崩溃时如何用U盘重新安装Win7系统
- torque安装笔记
- Storm 的可靠性保证测试
- Golang笔记——方法
- WebView 简介
- 04号团队-团队任务3:每日立会(2018-11-28)
- URAL 1132 Square Root(二次剩余定理)题解
- 软件设计师教程(第5版)- 前言和目录
- C++设计一个长方形类
- c# 指定打开某个路径下的CMD_Windows小技巧 批处理文件实现目录下文件批量打包压缩...
- 【Selenium】控制当前已经打开的 chrome浏览器窗口
- springboot发送邮箱(阿里云、QQ邮箱)
- C盘扩容 ~直接磁盘管理器不能扩展~bitlocker加密解除
- bp暴力破解(转载)
- php的数组、排序、查找
热门文章
- 华为鸿蒙乌鸦快爷,华为鸿蒙第一批名单
- matlab 轴gui,MatlabüGUI学习笔记(4)——公共对象属性的轴,MatlabGUI,四,常用,之,Axes...
- python 方向键控制代码_Python控制鼠标键盘代码实例
- java shapes_Java Overlaping Shapes – 错误的重叠形状行为
- 响应式 Web 设计 - 媒体查询
- MYSQL中的日期转换
- poj2481树状数组解二维偏序
- JPA学习笔记二——Hello World
- MyBatis基本例子-实现增删改查
- 正整数和小数的正则写成自定义插件