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 张表, 几十张最多了,实际开发中,而且这里的数据都是比较乱 的, 因为很多表都有关联, 只是大致插表, 当跑不通的部分就可以人为 修改那块了,比自己慢慢插数据好点

时间: 2024-10-09 00:55:19

java+ mysql 给所有的表添加假数据的相关文章

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

在命令行下mysql的数据导出有个很好用命令mysqldump,它的参数有一大把,可以这样查看:mysqldump最常用的:mysqldump -uroot -pmysql databasefoo table1 table2 > foo.sql这样就可以将数据库databasefoo的表table1,table2以sql形式导入foo.sql中,其中-uroot参数表示访问数据库的用户名是root,如果有密码还需要加上-p参数Eg: C:\Users\jack> mysqldump -uroo

MySQL批量更新不同表中的数据

今天翻到以前写的批量更新表中的数据的存储过程,故在此做一下记录. 当时MySQL中的表名具有如下特征,即根据需求将业务表类型分为了公有.私有和临时三种类型,即不同的业务对应三张表,而所做的是区分出是什么类型(公有.私有.临时)的业务表对数据的固定字段做统一规律的处理. 下面为当时所编写的存储过程: BEGIN DECLARE done INT; DECLARE v_table_name VARCHAR(100); DECLARE v_disable VARCHAR(100); DECLARE v

MySql存储过程动态创建表并插入数据

最近做的一个项目,数据库用的是MySql,对于MySql不是很熟练,只是会简单的应用,毕竟简单的sql语句还是相通的,但是随着项目的深入复杂的sql语句开始慢慢多起来,其中一个小难点就是要根据当天的日期动态创建表,并且向其中插入数据. 具体逻辑可以理解为,先去数据库查询有没有当天的记录表,如果没有则创建表,然后执行当天的日志写入. Mysql的可视化工具我们用的是navicat,相对来说还是比较好用,当然没有sqlserver 那么人性化(很多快捷键不支持,操作累赘).下面我就来说一说用navi

java 之 servlet如何获取表单的数据

servlet如何获取表单的数据 前端页面通过form表单的形式提交数据 服务端定义servlet接口 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOExcption { // 定义一个用户信息类 Users u = new User(); String username; String password; Date birthday;

oracle和mysql中update联表批量更新数据的区别

之前碰到一个sql语句,在oracle中可以运行,在mysql上就不行,后来查了好久,发现了他们两个联表批量更新数据的区别如下: (借鉴一下别人的例子) update :单表的更新不用说了,两者一样,主要说说多表的更新复制代码 代码如下: Oracle> Oracle的多表更新要求比较严格,所以有的时候不是很好写,我们可以试试Oracle的游标 update ( select t.charger_id_ new_charger_id_ from t_cus_year_status t left

mysql数据库中给表添加index

一.添加index 1.alter table tableName add index indexName(conlum1,conlum2) 2.create index indexName on tableName(conlum1,conlum2) 二.删除index 1.alter table tableName drop index indexName; 2.drop index indexName on tableName; 三.查询table上的index show index fro

添加假数据

在开展新项目的时候,我现在的工作是修改已有页面.其中一些数据结构已修改,因此为了适配对应的数据显示,我需要修改后台的数据显示.但现在问题是我没有数据,怎样解决? 之前,我想到,就是已有的数据转化为新的数据,就要考虑工作量 后来,我问了同事,其实是可以自己新建测试的数据来测试和解决问题的 所以,就在一个新方法,新添加了很多变量,然后放在全局变量中

mysql创建数据库、表、写数据

mysql> create database ceshi;Query OK, 1 row affected (0.01 sec) mysql> use ceshi;Database changed mysql> create table if not exists test ( id int(10) PRIMARY KEY AUTO_INCREMENT, name varchar(50) NOT NULL);Query OK, 0 rows affected (0.04 sec) mys

mysql导出某张表的部分数据

1.使用into outfile '保存到操作系统的外部文件路径' mysql -uroot -p123456 -hhostname -P3306 select   column_name_list  from table_name where condition  into outfile '/home/glc/tmp/yes.csv'; 2.使用 mysql -e "select  column_name_list  from table_name where condition "