批处理JDBC语句以提高处理速度

原创 2004年07月20日 18:56:00
有的时候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.length; 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个用户的脚本,其运行速度就难以忍受。增加批处理将有助于提升性能,在后一种情况里,甚至可以改善代码的可读性。

JDBC批处理Select语句

在上一篇文章中提到了PreparedStatement的局限性:PreparedStatement不允许一个占位符(?)设置多个值,本文试图从其它角度来解决该问题。 在网络上开销最昂贵的资源就是客户...
  • zheng0518
  • zheng0518
  • 2013年08月20日 14:49
  • 4797

JDBC: 批量处理提高SQL处理速度

当需要成批插入或者更新记录时。可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率 JDBC的批量处理语句包括下面两个方法: addBatc...
  • u013497151
  • u013497151
  • 2015年02月13日 23:29
  • 1131

JDBC addbatch批量处理数据时有最大值限制

在用jdbc向数据灌入数据时,发现120000的数据每次只能灌入50000多条,其他的就没有了。  在oracle 9i(windows 2003),oracle 10g(RHEL 4)上试验证有相...
  • BabyNiu411
  • BabyNiu411
  • 2015年07月28日 08:52
  • 2704

JDBC: 批量处理提高SQL处理速度

当需要成批插入或者更新记录时。可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率 JDBC的批量处理语句包括下面两个方法: addBatc...
  • u013497151
  • u013497151
  • 2015年02月13日 23:29
  • 1131

提高窗体图层叠加处理速度

在前几节,我们使用窗体图层叠加技术,解决了窗体,例如鼠标移动时,破坏其他窗体界面的问题,但以此同时,也引入了新的问题。当鼠标移动时,内核会将所有窗口重新绘制,如果当前系统打开的窗口很多,假设有几十上百...
  • tyler_download
  • tyler_download
  • 2016年11月18日 11:42
  • 265

为了提高数据库的处理速度,怎样设计数据库?

本文首先讨论了基于第三范式的数据库表的基本设计,着重论述了建立主键和索引的策略和方案,然后从数据库表的扩展设计和库表对象的放置等角度概述了数据库管理系统的优化方案。  关键词: 优化(Optimiz...
  • qq_14844093
  • qq_14844093
  • 2015年04月09日 08:12
  • 367

并行编程提高软件处理速度

使用 TParallel 来提速你的循环,但总有些时候,你需要运行多个可以并行执行,而又并非循环的任务。 要执行此类任务,我们可以使用 System.Threading.TTask 和 System...
  • caonumber
  • caonumber
  • 2015年10月07日 11:37
  • 417

storm的利用并行度提高处理速度的几点感想

在storm的流计算框架中,在数据量非常大或者计算逻辑比较复杂的情况下,可能会造成chulisudubianmandeqingk...
  • shuaiOKshuai
  • shuaiOKshuai
  • 2014年08月04日 10:36
  • 4877

storm用于提高处理速度的并行度设计的感想2

最近看到一篇文章,是关于设定topology中并行度的设定,用于提高
  • shuaiOKshuai
  • shuaiOKshuai
  • 2014年08月18日 14:32
  • 1619

30种提高mysql处理速度的方法

1、应尽量避免在 where 子句中使用!=或  2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。  3、应尽量避免在 wher...
  • Alen_xiaoxin
  • Alen_xiaoxin
  • 2017年03月02日 21:33
  • 103
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:批处理JDBC语句以提高处理速度
举报原因:
原因补充:

(最多只允许输入30个字)