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 常用函数介绍
××××××××××××××××××××××××××××××××××××××× CvScalar imgmean,imgstd; double imgmax,imgmin; cvAvgSdv(img, ...
- POJ 3468.A Simple Problem with Integers 解题报告
用树状数组和线段树会比较简单,这里用这道题来学习Splay. 第一次写,代码比较丑 /* 初始化添加一个key值足够大的结点 保证每个需要的结点都有后继 */ #include <iostrea ...
- 18 4Sum(寻找四个数之和为指定数的集合Medium)
题目意思:给一个乱序数组,在里面寻找三个数之和为target的所有情况,这些情况不能重复,增序排列 思路:采用3Sum的做法 ps:有见一种用hash的,存任意两个元素的和,然后变成3sum问题,需要 ...
- extjs中gridpanel动态显示/隐藏列
在extjs3中,大家知道用 myGrid.getColumnModel().setHidden(i,true);但到了4.0后,已经没有getColumnModel这个方法了,我们在Ext.pane ...
- js 的其它运算符和优先级
三元运算符: 语法为 exp1? exp2:exp3 判断 exp1是true 和 false 如果true,则返回exp2 ,如果false ,则返回exp3 <script> if ...
- openerp service install
cp openerp.init to /etc/init.d/openerp update-rc.d openerp default PATH=/sbin:/usr/sbin:/bin:/ ...
- 如何在Android Studio中使用Gradle发布项目至Jcenter仓库
简述 目前非常流行将开源库上传至Jcenter仓库中,使用起来非常方便且易于维护,特别是在Android Studio环境中,只需几步配置就可以轻松实现上传和发布. Library的转换和引用 博主的 ...
- Bow模型(解释的很好)
Bag-of-words model (BoW model) 最早出现在NLP和IR领域. 该模型忽略掉文本的语法和语序, 用一组无序的单词(words)来表达一段文字或一个文档. 近年来, BoW模 ...
- 专家解读Linux操作系统内核中的GCC特性
专家解读Linux操作系统内核中的GCC特性 Linux内核使用GNU Compiler Collection (GCC)套件的几个特殊功能.这些功能包括提供快捷方式和简化以及向编译器提供优化提示 ...
- 6月A项目的总结
对JS效果的要求有几点: 1.顶部导航栏鼠标经过动画. 2.Slider轮播图带有左右箭头,底部有缩略图,缩略图和大图都会自动播放. 3.右侧有个三个按钮的导航菜单,第一个按钮回到整个页面顶部,第二个 ...