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操作
256636ms2543ms2356ms

 

 

 

 

转载于:https://www.cnblogs.com/-xiaomi-/archive/2013/03/25/2980167.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值