需求:别的项目, 代码扣过来了, 数据库也拿过来了, 但是数据库全是空表, 一共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 给所有的表添加假数据的更多相关文章

  1. MySQL库操作,表操作,数据操作。

      数据库服务器:本质就是一台计算机,该计算机上安装有数据库管理软件的服务端,供客户端访问使用. 1数据库管理系统RDBMS(本质就是一个C/S架构的套接字),关系型数据库管理系统. 库:(文件夹)- ...

  2. 用命令从mysql中导出/导入表结构及数据

    在命令行下mysql的数据导出有个很好用命令mysqldump,它的参数有一大把,可以这样查看:mysqldump最常用的:mysqldump -uroot -pmysql databasefoo t ...

  3. MySQL比较两个表不同的数据

    在本教程中,您将学习如何比较两个表以找到不匹配的记录. 在数据迁移中,我们经常需要比较两个表,以便在一个表中标识另一个表中没有相应记录的记录. 例如,我们有一个新的数据库,其架构与旧数据库不同.我们的 ...

  4. MySQL 两个数据库表中合并数据

    两个数据库表中合并数据 如果有  t1  和 t2 两个数据库表格,它们两个对应的字段是相同的.如何将 t2 的数据插入到t1中去呢? insert into t1 select * from t2 ...

  5. mysql 如何给大表添加字段

    1. 能不加字段就不要加, 能不修改字段就不要修改, 能不删除字段就不要删除, 等等为什么要删除字段呢? 如果没事,不要蛋疼的找事. 实际上,我们那次更新失败后, 我们并没有增加那个字段, 然后我们一 ...

  6. mysql将多张表COUNT的数据相加

    由于数据量过大,我们将根据用户id 将数据存储在不同的表中,根据用户id模10的余数作为表的后缀.有如下十张表:test_0, test_1, ... ,test_9现在需要根据某个条件查询统计数据我 ...

  7. 使用MySQL workbench 和Excel表之间的数据互相导出

    导出数据是很常用的功能,但今天在操作时遇到了一点问题,记录下来,方便其他人查阅. 1. 使用MySQL workbench 导出数据 在workbench里连接好数据库之后直接点击左侧的managem ...

  8. mycat使用之MySQL单库分表及均分数据

    转载自 https://blog.csdn.net/smilefyx/article/details/72810531 1.首先在Mycat官网下载安装包,这里就以最新的1.6版本为例,下载地址为:  ...

  9. 统计mysql库中每张表的行数据

    修改数据库配置文件:vim /etc/my.cnf [client] user=username password=password 使用shell脚本统计表中的行数据:count.sh #!/bin ...

随机推荐

  1. 主成份分析PCA

    Data Mining 主成分分析PCA 降维的必要性 1.多重共线性--预测变量之间相互关联.多重共线性会导致解空间的不稳定,从而可能导致结果的不连贯. 2.高维空间本身具有稀疏性.一维正态分布有6 ...

  2. 1. mybatis批量插入数据

    通过list <insert id="saveByList" useGeneratedKeys="true" parameterType="ja ...

  3. MySQL5.7.9免安装版配置方法

    1. 解压MySQL压缩包    将下载的MySQL压缩包解压到自定义目录下,我的解压目录是:    "D:\Program Files\mysql-5.7.9-win32"    ...

  4. eval函数:分号的应用

    eval("echo'hello world';"); ("参数;") eval函数把参数当做php代码来执行,参数后要有分号,最后还要另加一个分号 相当于: ...

  5. python之正则表达式备忘

    一简介:就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C ...

  6. 在MAC下 Python+Django+mysql配置

    今天在搭建Django+mysql环境的时候遇到了一点问题,记录下来. 安装环境:OS X 10.10操作系统,Python 2.7. MySQLdb其实包含在MySQL-python包中,因此无论下 ...

  7. Vim及VimScript资料总结《转载》

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   Vim教程 入门 Vim 实用技术 Learning the vi and Vim Editors A Byte of ...

  8. 一个关于导出excel模板的实例

    1 首先jsp页面 点击模板下载,会自动下载模板excel,效果如下 让我们看源码: 1 jsp页面 <div class="tab-pane" id="profi ...

  9. cadence遇到的问题(持续更新)

    1.画了DB9的封装,共十一个焊盘,其中两个是机械焊盘,在绘制PCB板时,想要将其接地,但无法连接,如图所示 因为是机械焊盘,所以无法用更改logic的方法进行网络更改,现在只发现一个办法,就是更改封 ...

  10. City Game

    hdu1505:http://acm.hdu.edu.cn/showproblem.php?pid=1505 题解:给你一个字符矩阵,里面有R和F两种字符,然后让你找一个最大的子矩阵,这个最大的子矩阵 ...