java+ mysql 给所有的表添加假数据
需求:别的项目, 代码扣过来了, 数据库也拿过来了, 但是数据库全是空表, 一共700 张表,需求是给表添加假数据,让它能运行起来。
一下是代码实现:
1.数据库连接:
public static Connection getConnection(){
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://192.168.0.12:3306/dmp_report_testdb?";
String user = "root";
String pass = "ycmedia_2015";
conn = DriverManager.getConnection(url,user,pass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
2.获取所有的表名:
public static Set<String> getTableName() throws SQLException{
Connection conn=getConnection();
DatabaseMetaData data = conn.getMetaData();
ResultSet colRet = data.getColumns(null,"%", "%","%");
Set<String> set= new TreeSet<String>();
while(colRet.next()) {
String typeName =colRet.getString("TABLE_NAME");
set.add(typeName);
}
return set;
}
3.获取表的数据类型,mysql有几十种,常用大概十几种:
* @return
* @throws SQLException
*/
public static Set<String> getType() throws SQLException{
Connection conn=getConnection();
DatabaseMetaData data = conn.getMetaData();
ResultSet colRet = data.getColumns(null,"%", "%","%"); Set<String> set= new TreeSet<String>();
while(colRet.next()) {
String typeName =colRet.getString("TYPE_NAME");
set.add(typeName);
}
return set;
}
4 分类:
/**
* BIGINT
BIGINT UNSIGNED(没有符号) 1-10
INT
INT UNSIGNED
SMALLINT
SMALLINT UNSIGNED
TINYINT
TINYINT UNSIGNED BIT 10 DATE 最近一周 DATETIME
TIMESTAMP (最近一周) DECIMAL 11.11
DOUBLE 11.11 LONGTEXT
MEDIUMTEXT
TEXT
VARCHAR
5 字符串类型处理
//随机字符串
public static String getRandomString(int length){
String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random random=new Random();
StringBuffer sb=new StringBuffer();
for(int i=0;i<length;i++){
int number=random.nextInt(62);
sb.append(str.charAt(number));
}
return sb.toString();
}
6.时间类型处理
/**
* 获取最近一个月随机一天
* @return
*/
public static String getMoth(Integer type){ Random r = new Random(); SimpleDateFormat sdf = null; if(type==1){
sdf=new SimpleDateFormat("yyyy-MM-dd"); }else{
sdf=new SimpleDateFormat("yyyy-MM-dd 00:00:00");
}
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, - r.nextInt(30));
Date monday = c.getTime();
return sdf.format(monday); }
7.获取sql
/**
* 获取sql
* @param list
* @param tableName
* @return
*/
public static String getSql(List<ClumnBean> list,String tableName){
StringBuffer sb = new StringBuffer();
Random random = new Random();
sb.append("insert into "+tableName +" values (");
for (int i = 0; i < list.size(); i++) {
if(list.get(i).getColumnType().contains("INT")){
sb.append(random.nextInt(10)+", ");
}
else if(list.get(i).getColumnType().contains("CHAR")||list.get(i).getColumnType().contains("TEXT"))
{
sb.append("'"+getRandomString(5)+"', ");
}
else if(list.get(i).getColumnType().equals("BIT"))
{
sb.append("10, ");
}
else if(list.get(i).getColumnType().equals("DOUBLE")||list.get(i).getColumnType().equals("DECIMAL"))
{
sb.append("11.11, ");
}
else if(list.get(i).getColumnType().equals("DATETIME")||list.get(i).getColumnType().equals("TIMESTAMP"))
{
sb.append("'"+getMoth(2)+"', ");
}else if(list.get(i).getColumnType().equals("DATE")){
sb.append("'"+getMoth(1)+"', ");
} }
return sb.toString().substring(0, sb.toString().length()-2)+")";
}
8 .最后一步,主分支
public static void main(String[] args) throws Exception{
Connection conn=getConnection();
Set<String> set = getTableName();
List<ClumnBean> list =new ArrayList<ClumnBean>();
for (String str :set) {
list =getColumnList(str);
for (int i = 0; i < 20; i++) {
String sql =getSql(list,str);
System.err.println(sql);
try {
conn.prepareStatement(sql).execute();
} catch (Exception e) {
System.err.println("遇到异常");
continue;
}
}
list =new ArrayList<ClumnBean>();
}
}
=====================================================分割线=====================================================================
当然这种场景很少见吧, 大部分项目都不超过100 张表, 几十张最多了,实际开发中,而且这里的数据都是比较乱 的, 因为很多表都有关联, 只是大致插表, 当跑不通的部分就可以人为 修改那块了,比自己慢慢插数据好点
java+ mysql 给所有的表添加假数据的更多相关文章
- MySQL库操作,表操作,数据操作。
数据库服务器:本质就是一台计算机,该计算机上安装有数据库管理软件的服务端,供客户端访问使用. 1数据库管理系统RDBMS(本质就是一个C/S架构的套接字),关系型数据库管理系统. 库:(文件夹)- ...
- 用命令从mysql中导出/导入表结构及数据
在命令行下mysql的数据导出有个很好用命令mysqldump,它的参数有一大把,可以这样查看:mysqldump最常用的:mysqldump -uroot -pmysql databasefoo t ...
- MySQL比较两个表不同的数据
在本教程中,您将学习如何比较两个表以找到不匹配的记录. 在数据迁移中,我们经常需要比较两个表,以便在一个表中标识另一个表中没有相应记录的记录. 例如,我们有一个新的数据库,其架构与旧数据库不同.我们的 ...
- MySQL 两个数据库表中合并数据
两个数据库表中合并数据 如果有 t1 和 t2 两个数据库表格,它们两个对应的字段是相同的.如何将 t2 的数据插入到t1中去呢? insert into t1 select * from t2 ...
- mysql 如何给大表添加字段
1. 能不加字段就不要加, 能不修改字段就不要修改, 能不删除字段就不要删除, 等等为什么要删除字段呢? 如果没事,不要蛋疼的找事. 实际上,我们那次更新失败后, 我们并没有增加那个字段, 然后我们一 ...
- mysql将多张表COUNT的数据相加
由于数据量过大,我们将根据用户id 将数据存储在不同的表中,根据用户id模10的余数作为表的后缀.有如下十张表:test_0, test_1, ... ,test_9现在需要根据某个条件查询统计数据我 ...
- 使用MySQL workbench 和Excel表之间的数据互相导出
导出数据是很常用的功能,但今天在操作时遇到了一点问题,记录下来,方便其他人查阅. 1. 使用MySQL workbench 导出数据 在workbench里连接好数据库之后直接点击左侧的managem ...
- mycat使用之MySQL单库分表及均分数据
转载自 https://blog.csdn.net/smilefyx/article/details/72810531 1.首先在Mycat官网下载安装包,这里就以最新的1.6版本为例,下载地址为: ...
- 统计mysql库中每张表的行数据
修改数据库配置文件:vim /etc/my.cnf [client] user=username password=password 使用shell脚本统计表中的行数据:count.sh #!/bin ...
随机推荐
- ueditor爬坑
在使用UeEditor中遇到几个个坑 1.添加的html代码中使用的样式class被guolv掉 解决方案:在ueditor.config.js中,xss过滤白名单中,每个元素添加class,如下图 ...
- JSP JS 日期控件的下载、使用及注意事项
网上流行的时间日期控件比较多,个人觉得My97DatePicker的日期控件不错,值得推荐. 具体的使用过程如下: 1.下载My97DatePicker.rar或 My97DatePickerBeta ...
- hdoj 1176(可转化为数塔)
免费馅饼 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissio ...
- 【清澄A1333】【整体二分+二维树状数组】矩阵乘法(梁盾)
试题来源 2012中国国家集训队命题答辩 问题描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入格式 第一行两个数N,Q,表示矩阵大小和询问组数: 接下来N行N列一共 ...
- GRUB配置
参数讲解: default :定义缺省启动的系统 如果安装多系统的话 会有多个title 信息 可以通过设置 default: 来改变启动那个系统 默认第一个为0 第二个为1 依次类推 timeout ...
- php 拓展 Filter 过滤器
简介 Filter,它的作用就和他的名字一样——过滤.过滤规则成为过滤器,Filter内置了多个常用过滤器,根据过滤器功能的不 同,可以分成净化过滤器(Sanitization)和验证过滤 ...
- css杂项,清除浮动
在写HTML代码的时候,发现在Firefox等符合W3C标准的浏览器中,如果有一个DIV作为外部容器,内部的DIV如果设置了float样式,则外部的容器DIV因为内部没有clear,导致不能被撑开.看 ...
- php开发环境安装配置(1)
个人记录高手请勿喷! 下载xampp我这是个中文版的可以自己搜索下载安装别的版本也行. 双击下载的xampp会提示路径相当于解压到指定的路径 到对应路径去可看到如下: 打开 2.配置: 成功之后会如下 ...
- List<T> ForEach break
有没有方法扩展跳出 list.foreach循环? 理论上它其实不是一个循环,而是一个方法 代理调用内部循环 public delegate void ForEachAction<T> ...
- Thinking In Java 学习笔记 1-5 章
第1章 对象导论 本章主要讲OOP的思想及一些OOP基本概念 1.抽象过程:万物都是对象,对象具有状态.行为和标识.对象拥有属性和方法,以及在内存中的唯一地址. 2.每个对象都有一个接口:通过接口给对 ...