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 ...
随机推荐
- SGU 223.Little Kings
时间限制:0.25s 空间限制:4M 题意: 在 n*n(n≤10)的棋盘上放 k (k<=n*n)个国王(可攻击相邻的 8 个格子),求使它们无法互相攻击的方案数. Solution: 采用状 ...
- mongo db安装和php,python插件安装
安装mongodb 1.下载,解压mongodb(下载解压目录为/opt) 在/opt目录下执行命令 wget fastdl.mongodb.org/linux/mongodb-linux-x86_6 ...
- window下配置SSH连接GitHub、GitHub配置ssh key(转)
转自:http://jingyan.baidu.com/article/a65957f4e91ccf24e77f9b11.html 此经验分两部分: 第一部分介绍:在windows下通过msysGit ...
- zTree异步生成数据时无法获取到子节点的选中状态
最近在项目中遇到一个问题,需求如下: 根据选中不同的人员(ID)向后台发送ajax请求,通过返回的数据来生成该人员的权限访问树,该树目录最少为3级目录,在生成的时候会自动勾选上次保存过的选中状态,点击 ...
- web字体格式转换
@font-face { font-family: 'emotion'; src: url('emotion.eot'); /* IE9*/ src: url('emotion.eot?#iefix' ...
- Flask jQuery ajax
http://www.runoob.com/jquery/jquery-ref-ajax.html http://jun1986.iteye.com/blog/1399242 下面是jQuery官方给 ...
- Session和Cookie的学习笔记2
<?php /* Cookie在计算机中保存的格式 用户名@网站地址[数字].txt Cookie在文件夹下,每个Cookie文件都是一个简单而又普通的文件件而不是程序,Cookie中的内容大多 ...
- Day14 HTML补充
一.认识前端 前端开发的核心语言: html - 超文本标记语言 结构 css - 层叠样式表 样式 javascript - 脚本语言 行为 <html></html> 双标 ...
- codebook法分割前景目标
利用codebook法训练得到背景模型后,对背景差分得到的掩模图像去噪声并找到较大连通域.相对于平均背景法,它的分割效果更好些.当然,分割效果和背景模型训练的帧数有很大关系,适当调整一些参数会得到更好 ...
- python 性能鸡汤
转载自:http://www.oschina.net/question/1579_45822 1:使用内建函数input() int() isinstance() issubclass() iter( ...