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

 

 

 

 

posted @ 2013-03-25 09:43  晒米的猫  阅读(674)  评论(0编辑  收藏  举报