executevlan batch什么意思思

executebatchnonquery用心创造滤镜
扫码下载App
汇聚2000万达人的兴趣社区下载即送20张免费照片冲印
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(5420)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'Mysql批量插入executeBatch的性能问题',
blogAbstract:'[本文已迁移至'
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}1403人阅读
oracle(27)
作者同类文章X
100W数据生成一个文件的过程中,等文件生成完毕之后才能把数据库中的数据备份到历史表中,这个时候才能进行事务的提交,也就是执行commit(), 并且删除原表数据,100W数据按照3000一批写入文件,每批次只是通过 PreparedStatement.addBatch();加入到批次里面去,并没有执行PreparedStatement.executeBatch(),而是在commit()之前统一调用的PreparedStatement.executeBatch(),这样的话PreparedStatement就会缓存100W条数据信息,造成了内存溢出.
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:892588次
积分:11813
积分:11813
排名:第567名
原创:320篇
转载:239篇
评论:123条
(8)(3)(3)(2)(5)(6)(5)(3)(3)(4)(7)(14)(22)(33)(22)(12)(15)(19)(20)(8)(16)(5)(3)(10)(9)(5)(9)(17)(15)(6)(10)(6)(15)(5)(14)(8)(30)(30)(6)(9)(3)(3)(5)(19)(3)(7)(10)(8)(4)(2)(5)(3)(6)(3)(3)(9)(25)批处理JDBC语句以提高处理速度
有的时候JDBC运行的不够理想,这就促使我们写一些与特定数据库相关的存储过程。作为一个替换方案,不妨试一下Statement的批处理特征,看看一次执行所有的SQL语句是否会带来速度的提升。
存储过程最简单的形式就是整个过程只包含一组SQL语句。将这些语句放到一起能容易管理也可以提高运行速度。Statement类具有包含一串SQL语句的能力,因此它允许所有的SQL语句在一个数据库会话中被执行,从而避免了向数据库进行一连串的执行调用。
使用批处理功能涉及到两个方法:
addBatch(String)方法
executeBatch方法
addBatch方法可以接受一段标准的SQL(如果你使用一个Statement)作为参数,也可以什么参数都不带(如果你使用一个PreparedStatement)。
executeBatch方法接着执行SQL语句,返回一个int型数组。这个数组包括每条语句影响到的行数。如果在一个批处理中使用是一个SELECT或者其它只返回结果的语句,那么将会产生一个SQLException异常。
下面是一个简单的java.sql.Statement的例子:
Statement stmt = conn.createStatement();
stmt.insert(&DELETE FROM Users&);
stmt.insert(&INSERT INTO Users VALUES('rod', 37, 'circle')&);
stmt.insert(&INSERT INTO Users VALUES('jane', 33, 'triangle')&);
stmt.insert(&INSERT INTO Users VALUES('freddy', 29, 'square')&);
int[] counts = stmt.executeBatch();
使用PreparedStatement会稍有不同。它只能处理一段SQL语句,但可以带很多参数。下面的是使用PreparedStatement重写的上面的例子:
//注意我们并没有做任何删除动作
PreparedStatement stmt = conn.prepareStatement( _
&INSERT INTO Users VALUES(?,?,?)& );
User[ ] users = ...;
for(int i=0; i&users. i++)
stmt.setInt(1, users[i].getName());
stmt.setInt(2, users[i].getAge());
stmt.setInt(3, users[i].getShape());
stmt.addBatch( );
int[ ] counts = stmt.executeBatch();
这是处理那些不知道具体执行次数的SQL代码的一个好方法。没有批处理,如果要添加50个用户,其性能可能受到影响。如果谁写了一段添加10000个用户的脚本,其运行速度就难以忍受。增加批处理将有助于提升性能,在后一种情况里,甚至可以改善代码的可读性。
使用PreparedStatement减少开发时间
JDBC(Java Database Connectivity,java数据库连接)的API中的主要的四个类之一的java.sql.Statement要求开发者付出大量的时间和精力。在使用Statement获取JDBC访问时所具有的一个共通的问题是输入适当格式的日期和时间戳: 20:56 或者 02/05/02 8:56 PM。通过使用java.sql.PreparedStatement,这个问题可以自动解决。一个PreparedStatement是从java.sql.Connection对象和所提供的SQL字符串得到的,SQL字符串中包含问号(?),这些问号标明变量的位置,然后提供变量的值,最后执行语句,例如:
Stringsql = &SELECT * FROM People p WHERE p.id = ? AND p.name = ?&;
PreparedStatement ps = connection.prepareStatement(sql);
ps.setInt(1,id);
ps.setString(2,name);
ResultSet rs = ps.execute();
使用PreparedStatement的另一个优点是字符串不是动态创建的。下面是一个动态创建字符串的例子:
Stringsql = &SELECT * FROM People p WHERE p.i = &+
Click here to find out more!
这允许JVM(JavaVirtual Machine,Java)和驱动/缓存语句和字符串并提高性能。
PreparedStatement也提供数据库无关性。当显示声明的SQL越少,那么潜在的SQL语句的数据库依赖性就越小。
由于PreparedStatement具备很多优点,开发者可能通常都使用它,只有在完全是因为性能原因或者是在一行SQL语句中没有变量的时候才使用通常的Statement。
发出查询和处理结果
在任何你想向数据库运行一个SQL语句的时候, 你都需要一个Statement 或 PreparedStatement 实例。 一旦你拥有了一个Statement 或 PreparedStatement,你就可以 发出一个查询。 这样将返回一个ResultSet 实例, 在其内部包含整个结果。 Example 31-1 演示了这个过程。
Example 31-1. 在 JDBC 里处理一个简单的查询
这个例子将发出一个简单的查询然后用一个 Statement打印出每行的第一个字段。
Statement st = db.createStatement();
ResultSet rs = st.executeQuery(&SELECT * FROM mytable WHERE columnfoo = 500&);
while (rs.next()) {
System.out.print(&Column 1 returned &);
System.out.println(rs.getString(1));
rs.close();
st.close();
这个例子将使用 PreparedStatement 发出和前面一样的查询,并且在查询中制作数值。
int foovalue = 500;
PreparedStatement st = db.prepareStatement(&SELECT * FROM mytable WHERE columnfoo = ?&);
st.setInt(1, foovalue);
ResultSet rs = st.executeQuery();
while (rs.next()) {
System.out.print(&Column 1 returned &);
System.out.println(rs.getString(1));
rs.close();
st.close();
31.3.1. 使用 Statement或 PreparedStatement 接口
在使用Statement或 PreparedStatement接口时必须考虑下面的问题:
&&& 你可以将一个Statement或 PreparedStatement实例使用任意次。 你可以在打开一个联接后马上创建一个Statement 实例, 并且在联接的生存期里使用之。 你必须记住每个Statement或 PreparedStatement只能存在一个 ResultSet。
&&& 如果你需要在处理一个ResultSet的时候执行一个查询, 你只需要创建并且使用另外一个Statement。
&&& 如果你使用了 threads (线程),并且有几个使用数据库, 你对每个线程必须使用一个独立的Statement。 如果考虑使用线程, 请参考本文档稍后的 Section 31.8 章节, 因为这些内容包含一些重要的信息。
&&& 在你用完 Statement 或者 PreparedStatement 之后,你应该关闭它。
31.3.2. 使用ResultSet(结果集)接口
使用ResultSet接口时必须考虑下面的问题:
&&& 在读取任何数值的时候,你必须调用next()。 如果还有结果则返回真(true),但更重要的是,它为处理准备了数据行。
&&& 在 JDBC 规范里,你对一个字段应该只访问一次。 遵循这个规则是最安全的,不过目前 PostgreSQL 驱动将允许你对一个字段访问任意次。
&&& 一旦你结束对一个 ResultSet 的处理,你必须对之调用 close()来关闭它。
&&& 一旦你使用那个创建ResultSet的 Statement做另一个查询请求, 当前打开的 ResultSet 实例将自动关闭。
&&& 目前的 ResultSet 是只读的。 你不能通过 ResultSet 来更新数据。 如果你想更新数据,那么你就需要使用普通的方法来做∶ 通过发出一条 SQL 更新语句。这么做是和 JDBC 规范兼容的,它并不要求驱动提供可更新的结果集的支持。
作者&ERDP技术架构&PreparedStatement.executeBatch()效率低的问题
[问题点数:40分]
PreparedStatement.executeBatch()效率低的问题
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。}

我要回帖

更多关于 executebatch返回值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信