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 ...
随机推荐
- opencv有关错误及解决办法
1.载入图片时内存溢出情况,如图: 分析及解决办法:因为载入的图片太大,导致内存溢出.所以更换小一点的图片就行了. 2.
- SGU 168.Matrix
时间限制:0.5s 空间限制:15M 题意: 给出一个N*M的矩阵A,计算矩阵B,满足B[i][j]=min{ A[x][y]:(y>=j) and ( x>=i+j-y )} Solut ...
- 【POJ1568】【极大极小搜索+alpha-beta剪枝】Find the Winning Move
Description 4x4 tic-tac-toe is played on a board with four rows (numbered 0 to 3 from top to bottom) ...
- 原生javascript写的侧栏跟随效果
浏览网站时经常看到有的网站上,当一个页面很长的时候,设定侧栏内容会跟随滚动条滚动,我们把这种效果叫做“侧栏跟随滚动”.这种特效对提高网站浏览量.文章点击率.广告点击量都有一定效果. 侧栏跟随滚动的实现 ...
- 使用Thinkphp框架开发移动端接口
本文给大家分享的是使用thinkphp框架开发移动端接口的2种方法,一种是开发API,另外一种是实现移动端访问自动切换移动主题模板,从而实现伪app访问,下面我们就来详细看下如何实现吧. 方案一:给 ...
- Android与Asp.Net Web服务器的文件上传下载BUG汇总[更新]
遇到的问题: 1.java.io.IOException: open failed: EINVAL (Invalid argument)异常,在模拟器中的sd卡创建文件夹和文件时报错 出错原因可能是: ...
- Js冒泡事件和捕获事件
js中冒泡事件和捕获事件: 冒泡事件:冒泡事件是从里向外,即是从被绑定元素开始一直向外到达页面的所有祖先元素都会被触发,这 一过程被称为事件冒泡.这个事件从原始元素开始一直冒泡到DOM树的最上层 捕获 ...
- vsftpd.conf 联机手册
vsftpd.conf - vsftpd 的配置文件 描述vsftpd.conf 可以用于控制 vsftpd, 以实现各种各样的功能. vsftpd 缺省到 /etc/vsftpd.conf 处查找此 ...
- iOS:KVO/KVC 的概述与使用
iOS:KVO/KVC 的概述与使用 KVO APP开发技术QQ群:347072638 一,概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性 ...
- opencv 2.46与visual studio 2012 配置方法
一开学就搞实训,还是没学过的图像处理.痛苦啊!图像处理时一般使用Matlab中的图像工具箱,或者是C/C++和OpenCV结合使用.以前看过一些关于opencv的文章,没想到现在要用上了. 把搭建开发 ...