JDBC executeBatch() 效率低 如何解决 10

//加载数据驱动Class.forName("oracle.jdbc.driver.OracleDriver");//获取连接conn=DriverManager.get... // 加载数据驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
// 获取连接
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:iasdb","borough_user","password");
conn.setAutoCommit(false);// 取消自动事务提交
String sql1 = " update approved_maininfo t set t.declareflag='N' where 1=1 and t.seqcode in (?) ";
ps = conn.prepareStatement(sql1);
ps.setString(1, a);其中a是由500个主键拼接而成,如1,2,3,4,……500
ps.addBatch();
//类似以上操作 ps.accBatch();执行该操作7次
ps.executeBatch();// 执行批

try {// 这里一定要捕捉异常
conn.commit();// 提交事务
} catch (SQLException exc) {
conn.rollback();// 在批处理命令中,如果有一个命令出现了错误,则回滚
}
执行该操作,用的时间特长,请问哪位能给优化一下
展开
 我来答
jansonzhan
2011-07-11
知道答主
回答量:15
采纳率:0%
帮助的人:4.3万
展开全部
conn.commit() 不要一次性全部提交事务,分批提交,比如1000提交一次,这样能有效提高效率!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hanliwoyaoai
2011-07-02 · TA获得超过416个赞
知道小有建树答主
回答量:593
采纳率:0%
帮助的人:464万
展开全部
你这是批处理嘛 你这不是就和直接执行一次sql一样吗?
你要想批处理 你直接把主键拼的字符串拆开 然后使用批处理呗 并且in语句遇到大表的话就慢
你把 update approved_maininfo t set t.declareflag='N' where 1=1 and t.seqcode =?
然后把主键拆成一个数组来做 估计会快
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
慷慨且坦荡的小烤红薯L
2011-07-02 · TA获得超过605个赞
知道小有建树答主
回答量:1470
采纳率:75%
帮助的人:261万
展开全部
可以使用预编译语句 。
Exam :

Class.forName("sun.jdbc.JdbcOdbcDriver") ;
Connection c = DriverManager.getConnetction("jdbc:odbc:studentDatabase") ;
// 预编译
PreparedStatement ps = c.prepareStatement("insert into stu values(?,?,?)") ;
ps.setInt(1,2009123) ;
ps.setString(2,"Jack") ;
ps.setInt(3,25) ;

ps.executeUpdate() ;

c.close() ;
ps.close() ;
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式