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

  • 相关阅读:
    JDBC遇到向ORACLE数据库表执行插入操作时,报错“列在此处不允许”
    关于对称加密和非对称加密以及签名,认证和证书的理解
    .net framework 各版本区别
    数据库设计三大范式
    业务系统设计
    修改 Windows 服务器默认远程端口3389
    iis读取不到本地证书问题 提示已经导入成功
    HTTPS 建立连接的详细过程
    使用ServiceStack构建Web服务
    转-微信支付(公众号支付JSAPI)
  • 原文地址:https://www.cnblogs.com/zgghb/p/5332291.html
Copyright © 2011-2022 走看看