Java批量insert到Oracle,3万数据要求10秒

zjwilove4 2010-03-24 12:30:57
如何实现3万数据批量添加到oracle,并且时间在10秒以内。大伙能给个思路么?
服务器和数据库在同一台机器上。
...全文
5511 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
celeron729 2011-11-17
  • 打赏
  • 举报
回复
http://blog.csdn.net/lg2512/article/details/6387555
celeron729 2011-11-17
  • 打赏
  • 举报
回复 1
使用存储过程,将参数定为数组(就是插入的数据,可以一个参数对一批数据),java调用就可以,正常情况应该用不了10秒
jake136 2011-01-29
  • 打赏
  • 举报
回复
批量绑定可以解决这个问题
zjwilove4 2010-03-31
  • 打赏
  • 举报
回复
再次感谢大家的回答
[Quote=引用 15 楼 kaoh1631 的回复:]
性能和人性化的提示是有矛盾的。

比如:

1 WEB上,需要检验excel里面的数据是否合法,并提示用户修正数据。

2 当执行SQL失败时,你需要使用事务回滚,并提示失败信。

3 excel2003数据量行数是有限制的,最多为65553行。一个excel 30000行,看起来已经很头疼了。
[/Quote]
第一点:我把JXL再次封装。解析的时候传入条件数组即可判断是否合法并且记录下不合法的数据,返回给用户。
第二点:数据库交互开启了事务保证一致性(成功解析的数据也要返回给用户...).
第三点:这个没法解决....
还有一个让人郁闷的问题JXL和POI数据超过1W5之后有内存溢出问题,设置JVM内存大小也没作用。
求解...
liu_siat 2010-03-31
  • 打赏
  • 举报
回复
并行处理
海诗美妆 2010-03-31
  • 打赏
  • 举报
回复
1.使用多线程,同时insert
2.每次insert一定数量的数据(如1000行)
3.insert使用batch模式
4.注意管理每次insert的数据,不要重复insert



只要数据库承受得起,10秒内3万条应该没有问题。
Thinking_In_IT 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zjwilove4 的回复:]
是这样的
BS结构 客户端上传Excel 使用JXL解析出来 载入内存(List) 然后再使用JDBC添加或更新到数据库


我现在使用的方式是采用批处理 如果数据大于1000条就1000条一提交。

1W条数据 JXL解析需要1秒左右 数据库操作1秒左右

网络是局域网 服务器 酷睿双核 2G内存
[/Quote]

性能和人性化的提示是有矛盾的。

比如:

1 WEB上,需要检验excel里面的数据是否合法,并提示用户修正数据。

2 当执行SQL失败时,你需要使用事务回滚,并提示失败信。

3 excel2003数据量行数是有限制的,最多为65553行。一个excel 30000行,看起来已经很头疼了。

性能与人性化 两难境地。
技术方舟 2010-03-31
  • 打赏
  • 举报
回复
可以用文件形式导入。我想可以满足你的要求。
liguangwen86 2010-03-31
  • 打赏
  • 举报
回复
这个得需要测试
zjwilove4 2010-03-30
  • 打赏
  • 举报
回复
谢谢大家的回答
zjwilove4 2010-03-30
  • 打赏
  • 举报
回复
是这样的
BS结构 客户端上传Excel 使用JXL解析出来 载入内存(List) 然后再使用JDBC添加或更新到数据库


我现在使用的方式是采用批处理 如果数据大于1000条就1000条一提交。

1W条数据 JXL解析需要1秒左右 数据库操作1秒左右

网络是局域网 服务器 酷睿双核 2G内存
zoeg 2010-03-30
  • 打赏
  • 举报
回复
你的ORACLE服务器能够支持10秒3万数据量的处理么?
如果只是为了吃一个批量文件,直接用数据库的批量导入命令就好了!
Thinking_In_IT 2010-03-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 zjwilove4 的回复:]
如何实现3万数据批量添加到oracle,并且时间在10秒以内。大伙能给个思路么?
服务器和数据库在同一台机器上。
[/Quote]

三万数据是从哪里来的?

1 数据源来自文件、文本数据?

1) 性能高 :oracle 有个sqlldr 速度很快 , 你可以在脚本了写好命令,使用JAVA 直接调用这个脚本

就可以了

2)性能较低:JDBC 批处理命令

2 数据源来自数据库的某个表,例如data_table

直接使用 insert into 目标_table select * from data_table
kitajima-- 2010-03-30
  • 打赏
  • 举报
回复
创建Sequence,
  • 打赏
  • 举报
回复
在Hibernate应用中如何处理批量更新和批量删除?

http://www.phome.asia/forum/thread/16537.html
lxh.lcl 2010-03-30
  • 打赏
  • 举报
回复
AddBatch
APOLLO_TS 2010-03-26
  • 打赏
  • 举报
回复
我使用本表复制数据,一万条6秒。
xuhesheng 2010-03-26
  • 打赏
  • 举报
回复
你只使用insert还是慢的
你可以使用AddBatch
一起提交
或者感错像ls说的使用存储过程完成
whlcy 2010-03-26
  • 打赏
  • 举报
回复
用存储过程!!!!
加载更多回复(3)

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧