java几种不同的写数据库方法(大数据)
在java下 写入大数据(几十万甚至上百万条数据)是一个很考验效率的问题,下面就程序中遇到的一些问题进行总结:
实验题目:
用多线程生成100个不重复的随机数,并分别存储到本地文件和DB中;
若此处的100个改为1w会如何呢?
三种写数据的方法:
1.使用SQL语句 直接插入数据库
相关代码如下 使用预编译SQL语句进行操作
PreparedStatement pstm = con.prepareStatement("insert into number(value) values(?)");//预编译sql语句 //方法1 使用sql语句 一条一条插入数据库 while (it.hasNext()) { pstm.clearParameters(); //清空预编译语句 pstm.setInt(1, it.next()); //设置参数 pstm.execute(); //执行 }
2.使用事务进行操作
相关代码如下:暂缓commit的提交
//方法2 使用事务 con.setAutoCommit(false); //关闭自动提交 while (it.hasNext()) { pstm.clearParameters(); pstm.setInt(1, it.next()); pstm.execute(); } con.commit();//提交事务
3.使用batch 进行数据库操作
代码如下:
//方法3 使用batch final int BATCH_SIZE = 100; //设置batch大小 if(vector.size() >= BATCH_SIZE){ con.setAutoCommit(false); for(int i = 0;i < vector.size();i+=BATCH_SIZE) { pstm.clearBatch(); //清空batch for (int j = 0; j < BATCH_SIZE; j++) { pstm.setInt(1, it.next()); //设置参数 pstm.addBatch(); //增加batch } pstm.executeBatch(); //执行batch } con.commit(); //提交事务 }
三种方法的写数据时间测试:
写1w个随机数
方法1 SQL语句操作 | 方法2 事务操作 | 方法3 batch操作 |
256636ms | 2543ms | 2356ms |