- 浏览: 49789 次
文章分类
最新评论
对JDBC 的 CRUD操作,我相信对于每个开发人员来讲,是十分熟悉的,尤其是在小型公司的开发人员来讲,大部分的工作也就是这些了。但是对于一个大型系统而言,简单的CRUD是无法存活下来的,因为它的数据量极大,不是简单的几千条,几万条,有时基本在几十万条,甚至几百万条数据量。
之前我们的业务也没有太多,简单的生成订单就是普通的insert操作,有一次发现,操作一个2w条的订单数量,前后花费的时间要15分钟,这个让我有点失望。2w的数据量真的不太大,为什么这么慢呢?当然系统中还有其它的操作存在,不至于这么点的数据量让mysql撑不住了。
原理其实也很简单,每insert一条记录,需要记录下log等一系列的日志操作,这些都是要消费时间的。如果批量提交的话,则会只发送一次的请求。这就是批量提交与普通的提交的差别了。
但是要使用好批量提交操作,有几点还是要注意的。
1. 批量提交的次数,不是几十万条数量一股脑儿的提交上去了,一般是分段提交,每一段提交个1000条数据量,同一段的生成一个UUID记录;
2. 使用批量提交可以直接写事务,
这样写,没有问题,事务里面默认会把所有batch里的操作当成一个整体去提交。
3. 如果你没有在事务中写,很可惜,批量的操作会当成普通的操作了,此时你需要在连接的
时候去加一个参数:
以上就是记录JDBC 批量操作的方法和注意事项。
之前我们的业务也没有太多,简单的生成订单就是普通的insert操作,有一次发现,操作一个2w条的订单数量,前后花费的时间要15分钟,这个让我有点失望。2w的数据量真的不太大,为什么这么慢呢?当然系统中还有其它的操作存在,不至于这么点的数据量让mysql撑不住了。
原理其实也很简单,每insert一条记录,需要记录下log等一系列的日志操作,这些都是要消费时间的。如果批量提交的话,则会只发送一次的请求。这就是批量提交与普通的提交的差别了。
但是要使用好批量提交操作,有几点还是要注意的。
1. 批量提交的次数,不是几十万条数量一股脑儿的提交上去了,一般是分段提交,每一段提交个1000条数据量,同一段的生成一个UUID记录;
2. 使用批量提交可以直接写事务,
connection.setAutoCommit(false); psmt.addBatch(); psmt.executeBatch(); connection.commit();
这样写,没有问题,事务里面默认会把所有batch里的操作当成一个整体去提交。
3. 如果你没有在事务中写,很可惜,批量的操作会当成普通的操作了,此时你需要在连接的
时候去加一个参数:
rewriteBatchedStatements=true
以上就是记录JDBC 批量操作的方法和注意事项。
发表评论
-
Java IO 读文件的各种方法总结
2016-01-01 15:00 664IO分为字节流和字符流,字符就是简单的字符串存储,从理伦上讲, ... -
动态代理的应用
2015-12-22 17:30 690代理模式作为开发人员 ... -
Java Restful
2015-12-19 14:01 396对于两个系统之间交互信息,有两种常见的方式:webservic ... -
request.getInputStream() 只能读一次的解决方法
2015-12-17 12:17 2292我们知道request.getInputStream()只能读 ... -
java Hessian 版本冲突问题解决方法
2015-12-11 19:44 818今天在实际的项目发现了一个问题就是hessian的版本不兼容的 ... -
ThreadPoolExecutor参数讲解
2015-12-10 08:14 7761. 线程池可以节省创建多个线程带来的开销问题。 2. 线程 ... -
Java RSA 加密 解密 签名 验签
2015-12-09 10:01 58651. 加密的作用 1)明文变密文(你不知道密钥是很难解密的) ... -
Java Xstream xml 与bean之间的转换
2015-12-09 08:31 692xml文件如下: <mvc> & ... -
XPATH 解析XML
2015-12-09 08:28 3971. 表达式描述 nodename 选取此节点的所有子节 ... -
Java Dom4j 解析XML
2015-12-09 08:23 327Dom4j和JDom是很相似的,用起来十分方便。 XML文件 ... -
Java JDom 解析xml
2015-12-09 08:22 359JDOM在解析XML在代码量之上比之前的方法(DOM和SAX要 ... -
Java SAX 解析xml
2015-12-08 18:13 360在上一篇中http://gaofulai1988.iteye. ... -
Java XML解析系列
2015-12-08 18:00 678Java解析XML有多种方式,因此需要分为几个不同的系列来讲。 ... -
Java 背包算法计算从数组中找若干个数使其最接近某个数
2015-12-08 17:38 1934背包的算法的动态方式如下: f(i,w) = max{ f(i ... -
C3P0 连接分析
2015-12-01 19:05 850最近在看C3P0的原理,还是将C3P0的源码导入到Ecplis ... -
微信开发的原理
2015-11-30 10:10 1275微信在现在的生活中,扮演着举足轻重的角色,现在怎么东西都在微信 ... -
JAVA Timestamp 与Data的转化以及BigDecimal 保留两位小数
2015-11-27 14:47 15951. BigDecimal 保留两位小数 今天在项目中遇到这 ... -
java try catch finally return 继续
2015-11-27 13:45 361之前在博客中有一篇文章讨论过异常中return值的情况,有兴趣 ... -
Java WeakHashMap 分析
2015-11-26 08:17 578昨天在我们的系统中看 ... -
加密与解密
2015-11-18 18:12 439我本身不是学密码出身的,但在工作中经常要使用加密与解密的东东, ...
相关推荐
【IT十八掌徐培成】Java基础第23天-03.ppst-addBatch-executeBatch.zip
有时候JDBC运行得不够快,这使得有些程序员使用数据库... 使用批量处理功能涉及下面的两个方法: · addBatch(String) 方法 · executeBatch方法 如果你正在使用Statement 那么addBatch 方法可以接受一个通
【IT十八掌徐培成】Java基础第23天-03.ppst-addBatch-executeBatch - 副本.zip
我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的...
###批量操作 - Statement批量操作: statement.addBatch(sql1); statement.addBatch(sql2); statement.addBatch(sql3); //执行批量操作 statement.executeBatch(); - PreparedStatement批量操作: ...
JDBC:java版本的ODBC JDBC连接数据库的步骤: 1.注册驱动(加载驱动): 注册的方式: 1.使用类加载器(使用反射的方式) Class.forName(driverName); 2.实例化Driver Driver driver = new oracle.jdbc...
Q0060 JDBC批量更新的作用和用法 "提高执行效率。减少执行时间。 Statement sm = cn.createStatement(); sm.addBatch(sql1); sm.addBatch(sql2); ... sm.executeBatch() 或者 PreparedStatement ps = ...
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(10W+),如何提高效率呢?...int[] executeBatch() throws SQLException Submits a batch of commands to the database for exec
主要介绍了Java 字符串连接的性能问题分析的相关资料,需要的朋友可以参考下
使用jdbc执行oracle的删除操作的时候程序卡死不动了。 问题分析: 对于这一类问题,一般都是数据库事务未提交,导致executeUpdate卡死。 所以解决方案: 1、在执行完executeUpdate 后,记得将事务提交con.commit(); ...
int rows = session.executeBatch(); //执行 b.有参批量更新 String sql = "update bd_deptdoc set dept_code =„aaa‟ where dept_code=?”; SQLParameter param = new SQLParameter(); //构造参数对象 param....
… sm.executeBatch() 用Statement的好处就是每次可以直接传一个SQL语句进去,不用管那么多。可是在数据量比较大的时候,应该会对效率有影响。不建议使用。 PreparedStatement ps = cn.preparedStatement(sql); { ...
int [] batchNumber=sta.executeBatch(); conn.commit(); //将手动提交模式转换为自动提交模式 conn.setAutoCommit(true); return batchNumber.length; } catch (SQLException e) { JOptionPane....
executeQuery executeUpdate的区别
rainmeter_tool通过对贴吧大神得源代码进行修改,打造成适合自己的桌面零部散件原先功能显示时间,日期,星期三显示当地天气和未来4天天气自定义... CommandMeasure " MemoInputX ExecuteBatch 1-2 " ]ToolTipText =点
Student的描述.class
pstmt_item.executeBatch(); dbUtil.getCon().commit(); } catch (SQLException e) { e.printStackTrace(); try { dbUtil.getCon().rollback(); } catch (SQLException e1) { e1....
stat.executeBatch(); conn.commit(); sign = true; } catch (Exception ex) { conn.rollback(); sign = false; ex.printStackTrace(); } finally { try { conn.setAutoCommit(true); ...
主要介绍了Oracle addBatch()用法实例详解的相关资料,这里提供实例帮助大家掌握理解这部分知识,需要的朋友可以参考下