美文网首页计算机杂谈Java 杂谈程序员
【毕设进行时-工业大数据,数据挖掘】Java 数据库写入两百万条

【毕设进行时-工业大数据,数据挖掘】Java 数据库写入两百万条

作者: 张照博 | 来源:发表于2018-04-16 17:35 被阅读156次

    正文之前

    今天又浪了一天!我简直是不能原谅自己了!!!可耻!!!
    所以,还是把那200万条数据写入到数据库里边吧!没想到这还是个有技术性的活!折腾了个把小时才弄好!我也是太菜了!!!

    正文

    现在还在上传,我估摸着这初期100万条数据得好几分钟才能上传完毕!心痛

    写了这么老半天都只出来了三万条。。。

    实在难以想象,如果突然崩溃了我会不会想死??要知道我待会还要去健身, 100万条就这么久了!待会重来鬼知道吃晚饭之前能不能去健身房?!?!我还准备健身完回来吃晚呢!

    废话不多说,放代码!!

    import java.io.*;
    import java.text.NumberFormat;
    import java.io.IOException;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Scanner;
    
    
    public class WriteGearData {
        protected Mysql_Connect mysql=new Mysql_Connect();
    
    
        public void Delete(int max){
            try {
                mysql.Connect();
                Statement statement = mysql.getStatement();
                String DELETE = "delete from gear where id<"+max;
                boolean delete_ok = statement.execute(DELETE);
                if (delete_ok) {
                    System.out.println("Have Fun! Boys!\n\n");
                }
                statement.close();
                mysql.Dis_Connect();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        public String getInsertQuery(int id,Object[] name,Object[] value){
            String insert="INSERT INTO gear(id";
            for (int i=0;i<name.length;++i){
                insert+=(","+name[i]);
            }
            insert+=") values("+id;
            for (int i=0;i<value.length;++i){
                insert+=(","+value[i]+"");
            }
            insert+=");";
            return insert;
        }
    
        public void WriteData() throws IOException {
            Delete(100000);
            int hz[] = new int [] {0,10,20,30,40,50,60,70,80,90};
            int id = 0;
            for (int  x : hz) {
                String filename = "/Users/zhangzhaobo/Documents/Graduation-Design/Data/BrokenTooth Data/b30hz" + x + ".txt";
                Scanner scanner=new Scanner(new FileInputStream(filename));
                Object[] Name = new String[]{"Sensor1","Sensor2","Sensor3","Sensor4","HZ","category"};
                try {
                    mysql.Connect();
                    Statement statement = mysql.getStatement();
                    do{
                        Object [] line = new Object[6];
                        NumberFormat nf = NumberFormat.getNumberInstance();
                        nf.setMaximumFractionDigits(1);
                        for (int i=0;i<4;++i){
                            line[i]=Float.parseFloat(nf.format(scanner.nextFloat()));
                        }
                        line[4] = x;
                        line[5] = 0;
                        String INSERT = getInsertQuery(id, Name, line);
                        boolean insert_ok = statement.execute(INSERT);
                        if (insert_ok) {
                            System.out.println("Insert Failed!");
                        }
                        id++;
                    }while(scanner.hasNext());
                    statement.close();
                    mysql.Dis_Connect();
                } catch (SQLException e) {
                    e.printStackTrace();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

    这是Java版本的,在主程序里面定义一个实例对象就ok!

        public static  void main(String[] args) throws Exception{
            long startTime=System.currentTimeMillis();   //获取开始时间
            WriteGearData gear = new WriteGearData();
            gear.WriteData();
            long endTime=System.currentTimeMillis(); //获取结束时间
            System.out.println("程序运行时间: "+(endTime-startTime)+"ms");
        }
    

    13 万了 感动!!但是我又100万啊!!!

    另外其实还有个C++版本的,但是那个不是写入数据库,而是写入本地文本,果然,数据量一大,Java简直被C++掀开了裤子狂艹啊!C++我记得两百万数据也就10秒不到,虽然只是本地IO,但是这差距也太他么大了吧?!!啊??

    运行时间这么多。。 3589秒。。兄dei。。。也就是接近一个小时,就差十几秒 了!。。。100万条就一小时。。。想想那些上亿的真是心痛。。光是写进入就这么久。还要读出来,要处理。。。我滴妈!!难怪大数据!

    正文之后

    终于还是让我搞完了!!???

    相关文章

      网友评论

      • 虾游于海:batch操作!
        张照博:@虾游于海 恩恩。。我看到过这种写法,还能更快是吗?
        虾游于海:@HustWolf 还可以改,用prepareStatement
        addBatch
        张照博:@虾游于海 老哥!!服!速度快了几倍!Statement statement = mysql.getStatement();
        do{
        //连续添加多条静态SQL
        Object [] line = new Object[6];
        NumberFormat nf = NumberFormat.getNumberInstance();
        nf.setMaximumFractionDigits(1);
        for (int i=0;i<4;++i){
        line[i]=Float.parseFloat(nf.format(scanner.nextFloat()));
        }
        line[4] = x;
        line[5] = 1;
        String INSERT = getInsertQuery(id, Name, line);
        statement.addBatch(INSERT);
        id++;
        count++;
        //执行批量执行
        if (count>10000) {
        statement.executeBatch();
        count = 0;
        }
      • 大么大二郎:这个可以优化的,我原来导入过2万条数据,包括一些校验才用了不到十秒,分批次插入,按照每两万条十秒计算,100万条500秒内可以搞定的
        大么大二郎:@HustWolf 可以插入多个value,五千到一万之间,单机操作的话,一万条应该没问题,可以使用mybatis框架
        张照博:@NielLes 是可以一次插入多条记录吗? 一次insert value多个?
        张照博:、@NielLes ???how??:flushed: 求指教哇!

      本文标题:【毕设进行时-工业大数据,数据挖掘】Java 数据库写入两百万条

      本文链接:https://www.haomeiwen.com/subject/bduekftx.html