如何用java jdbc 向数据库表插入大数据量

jvm:-Xmx1024m
size = 1000000,可以插入成功。

如果再为size增大一个数量级,还是OutOfMemoryError,这时内存已经不好再增加分配了
批量处理本来是为了提高性能,但是太大的数据提交,因为堆的膨胀,堆的寻址会造成性能反而下降。
PreparedStatement加executeBatch方法可以更快,主要想提高预编译sql文件的次数,从而达到提高效率。
如果是为了事务处理,不妨用个变通的办法,建立临时表,导入数据,还是可以用到addBatch,比如每100条一个批次。

然后在另外一张表有个记录,记录是否全部导入成功的标志。

基本思路是利用两段提交理论
------------------------------

public class App {
public static void main(String[] args) throws Exception {
Connection connection = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:XE", "marshal", "password");
PreparedStatement preparedStatement = connection
.prepareStatement("insert into addbatch_test(id,name) values(?,?)");

int size = 1000000;

for (int i = 0; i < size; i++) {
preparedStatement.setInt(1, i);
preparedStatement.setString(2, "n" + i);
preparedStatement.addBatch();
}

preparedStatement.executeBatch();

preparedStatement.close();
connection.close();
}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值