- 浏览: 291336 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
chenchangqun:
这段示例代码没有客户端 没法实验
Java NIO原理和使用 -
congjl2002:
误,整理好了在发phk070832 写道垃圾代码,一大推的编译 ...
snmp trap的接收(jdmk方式) -
phk070832:
垃圾代码,一大推的编译错误,整理好了在发表吧。
snmp trap的接收(jdmk方式) -
zhangcctao:
我也遇到线程池的内存溢出问题。。不知道是不是这个原因呀?
多线程中使用静态方法 -
新入职:
分享了,这个eclise版本有没有讲究?我的3.3的可以么
windows下安装android及eclipse配置
在jdbc2.0里增加了批量处理的功能(batch),其允许将多个sql语句作为一个单元送至数据库去执行,这样做可以提高操作效率。
在操作大量的数据时, 先Prepare一个INSERT语句再多次的执行, 会导致很多次的网络连接. 要减少JDBC的调用次数改善性能, 可以使用PreparedStatement或是Statement 的AddBatch()方法一次性发送多个给数据库(PreparedStatement和Statement 的区别就不说了)
例如:
使用普通的for循环时,效率要低的多
public class testplain { public static void main(String[] args) throws Exception { Connection conn = getOracleConnection(); PreparedStatement ps = null; try { ps = conn .prepareStatement("INSERT INTO batchtab employees values (?, ?)"); conn.setAutoCommit(false); for (int n = 1; n < 3; n++) { Integer i = new Integer(n); ps.setString(1, i.toString()); ps.setString(2, "value" + i.toString()); ps.executeUpdate(); } conn.commit(); }catch (SQLException ex) { System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("Message: " + ex.getMessage()); System.out.println("Vendor error code: " + ex.getErrorCode()); } catch (Exception e) { e.printStackTrace(); System.err.println("Exception: " + e.getMessage()); } finally { if (conn != null) conn.close(); if (ps != null) ps.close(); } } public static Connection getOracleConnection() throws Exception { String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@localhost:1521:test"; String username = "test"; String password = "test"; Class.forName(driver); // load Oracle driver Connection conn = DriverManager.getConnection(url, username, password); return conn; } }
使用batch,将多个sql操作作为一个单元传输给数据库:
public class testbatch { public static void main(String[] args) throws Exception { Connection conn = getOracleConnection(); ResultSet rs = null; // Statement stmt = null; PreparedStatement stmt=null; try { // Create a prepared statement String sql = "INSERT INTO batchtab employees values (?, ?)"; stmt = conn.prepareStatement(sql); conn.setAutoCommit(false); stmt.clearBatch(); // Insert 3 rows of data for (int i=0; i<3; i++) { stmt.setString(1, ""+i); stmt.setString(2, "batch_value"+i); stmt.addBatch(); } int[] updateCounts = stmt.executeBatch(); System.out.println(updateCounts); conn.commit(); sql="SELECT * FROM batchtab"; stmt = conn.prepareStatement(sql); rs = stmt.executeQuery(); while (rs.next()) { String id = rs.getString("batch_id"); String name = rs.getString("batch_value"); System.out.println("id=" + id + " name=" + name); } } catch (BatchUpdateException b) { System.out.println("SQLException: " + b.getMessage()); System.out.println("SQLState: " + b.getSQLState()); System.out.println("Message: " + b.getMessage()); System.out.println("Vendor error code: " + b.getErrorCode()); System.out.print("Update counts: "); int[] updateCounts = b.getUpdateCounts(); for (int i = 0; i < updateCounts.length; i++) { System.out.print(updateCounts[i] + " "); } } catch (SQLException ex) { System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("Message: " + ex.getMessage()); System.out.println("Vendor error code: " + ex.getErrorCode()); } catch (Exception e) { e.printStackTrace(); System.err.println("Exception: " + e.getMessage()); } finally { if( conn != null ) conn.close(); if(stmt !=null) stmt.close(); if(rs !=null) rs.close(); } } public static Connection getOracleConnection() throws Exception { String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@localhost:1521:test"; String username = "test"; String password = "test"; Class.forName(driver); // load Oracle driver Connection conn = DriverManager.getConnection(url, username, password); return conn; } }
下面举个例子(使用statement的例子):
public class testbatch { public static void main(String[] args) throws Exception { Connection conn = getOracleConnection(); ResultSet rs = null; Statement stmt = null; try { stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); conn.setAutoCommit(false); stmt.clearBatch(); stmt.addBatch("INSERT INTO batchtab(batch_id, batch_value) VALUES('1', 'batch_value1')"); stmt.addBatch("INSERT INTO batchtab(batch_id, batch_value) VALUES('2', 'batch_value2')"); stmt.addBatch("INSERT INTO batchtab(batch_id, batch_value) VALUES('3', 'batch_value3')"); int[] updateCounts = stmt.executeBatch(); System.out.println(updateCounts); conn.commit(); rs = stmt.executeQuery("SELECT * FROM batchtab"); while (rs.next()) { String id = rs.getString("batch_id"); String name = rs.getString("batch_value"); System.out.println("id=" + id + " name=" + name); } } catch (BatchUpdateException b) { System.out.println("SQLException: " + b.getMessage()); System.out.println("SQLState: " + b.getSQLState()); System.out.println("Message: " + b.getMessage()); System.out.println("Vendor error code: " + b.getErrorCode()); System.out.print("Update counts: "); int[] updateCounts = b.getUpdateCounts(); for (int i = 0; i < updateCounts.length; i++) { System.out.print(updateCounts[i] + " "); } } catch (SQLException ex) { System.out.println("SQLException: " + ex.getMessage()); System.out.println("SQLState: " + ex.getSQLState()); System.out.println("Message: " + ex.getMessage()); System.out.println("Vendor error code: " + ex.getErrorCode()); } catch (Exception e) { e.printStackTrace(); System.err.println("Exception: " + e.getMessage()); } finally { if( conn != null ) conn.close(); if(stmt !=null) stmt.close(); if(rs !=null) rs.close(); } } public static Connection getOracleConnection() throws Exception { String driver = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@localhost:1521:testbatch"; String username = "test"; String password = "test"; Class.forName(driver); // load Oracle driver Connection conn = DriverManager.getConnection(url, username, password); return conn; } }
发表评论
-
java阻塞队列学习(转帖)
2010-06-06 11:50 3482import java.util.concurrent.Arr ... -
httpclient链接关闭问题(转帖)
2010-03-11 22:09 2156HttpClient client = new HttpCli ... -
J2EE集群原理(转贴)
2010-03-09 19:57 1227J2EE集群原理 什么是集群呢?总的来说,集群包括两个概念: ... -
Spring 实现ibatis事务回滚
2010-03-05 20:34 3654网上发现这篇文章,转过来学习一下,好不好用还没有实践,需要自己 ... -
java 可变参数
2009-12-14 20:50 14155vararg的意思是变量参数,它是与Jav ... -
java中的string
2009-11-25 14:45 1332从javaeye的论坛里看到这 ... -
使用JDBC对BLOB和CLOB进行处理
2009-11-12 20:33 4872从网上看到这篇文章,转过来做为学习用 设有表:create ... -
避免或最小化 Servlet 中的同步
2009-09-24 21:02 983servlet 是多线程的。基于 servlet 的应用程序必 ... -
httpclient 使用小记
2009-09-03 21:05 3399最近学习apache的httpclient 在使用postm ... -
httpclient 学习笔记
2009-08-23 16:52 1552前阵子,学习了一下APACHE 的httpclient,感觉h ... -
log4j使用
2009-06-19 21:08 1560从网上看到得,发现写 ... -
java虚拟机的一些概念
2009-05-24 10:22 1351从网上看到这篇文章,感觉适合初学jvm,就转来作为以后学习参考 ... -
xmlbean 生成带包路径的jar
2009-05-23 23:12 3309因为使用xmlbean生成 ... -
多线程中使用静态方法
2009-05-14 19:54 6649终于把内存泄漏问题解决了,不是多线程访问静态函数的问题,事实证 ... -
java Annotation入门
2009-04-16 21:22 1263因为偶然的原因需要使用Annotation,所以从网上找了这篇 ... -
MINA2.0简单使用
2009-04-12 16:12 5156一直知道MINA是apache 开发的一个开发socket编程 ... -
log4j参数配置说明
2009-03-22 20:31 2013前几天用到log4j,到网上查了一下他的参数配置,发现还是比较 ... -
portal之SSO开发文档
2009-03-02 20:12 4070前两天看到别人写的,感觉不错,就转了过来做为参考 ... -
cas在tomcat中的配置
2009-02-25 21:22 2851cas在tomcat上配置时,需要打开tomc ... -
SSO 原理浅谈
2009-02-25 19:41 2120SSO 是一个非常大的主题,我对这个主题有着深深的感受,自从 ...
相关推荐
`hibernate.jdbc.batch_size`是Hibernate配置中的一个重要参数,用于控制批处理操作的大小。本文将深入探讨这个参数的意义、作用以及如何在实际应用中进行测试。 批量插入是提高数据库性能的有效手段,特别是在大量...
此外,还可以通过分析Hibernate的性能指标来调整诸如`hibernate.jdbc.batch_size`等参数,以达到最佳性能平衡。 总之,通过上述几个方面的优化措施,可以显著提高基于Hibernate构建的应用程序的性能。在实际应用中...
6. **批处理(Batch Processing)**:对于需要执行大量相似SQL语句的情况,JDBC提供批处理功能,允许一次发送多个SQL语句,从而提高效率。 7. **JDBC URL**:每个数据库驱动都有一个特定的JDBC URL格式,用于标识要...
Java Database Connectivity(JDBC)是Java编程语言中用于与各种数据库进行交互的一组接口和类。JDBC2000和JDBC2005分别指的是在2000年和2005年时期的JDBC规范版本。这两个版本都是在Java数据库连接技术的发展历程中...
JDBC(Java Database Connectivity)是Java编程语言中用于与各种数据库进行交互的一种接口。在JDBC高级应用中,我们可以利用其提供的功能实现更高效、更灵活的数据操作。以下是一些关键知识点: 1. **元数据获取**...
在给定的压缩包文件中,包含了三个不同版本的达梦JDBC驱动,分别是Dm7JdbcDriver16.jar、Dm7JdbcDriver17.jar和Dm7JdbcDriver18.jar。 1. **JDBC驱动介绍**: JDBC是Java中用于与各种数据库进行交互的标准接口,它...
JDBC(Java Database Connectivity)是Java编程语言中用于与关系数据库交互的一种标准接口。它是Java平台的标准部分,允许开发人员使用SQL语言在Java应用程序中执行数据库操作。MySQL JDBC驱动,也称为MySQL ...
Java Database Connectivity(JDBC)是Java编程语言中用于访问数据库的标准应用编程接口(API)。JDBC3.0和JDBC4.0是两个重要的版本,它们在连接Java应用程序与Microsoft SQL Server 2005(对应JDBC3.0)和SQL ...
在数据库操作中,批量插入(Batch Insert)是一种提高性能的有效方式,尤其是在处理大量数据时。本文将探讨Mybatis和JDBC在批量插入MySQL数据库时的性能差异,并提供相关的测试资源。 首先,JDBC(Java Database ...
Java Database Connectivity (JDBC) 是Java编程语言中用于标准地连接和操作各种类型数据库的接口。它是Java平台的标准API,允许Java应用程序与各种关系型数据库进行交互。JDBC提供了一套规范,使得开发人员可以使用...
2. JDBC4:随着Java版本的更新,JDBC4在Java SE 5和6中引入,它扩展了JDBC3的功能,引入了更多的自动类型转换、连接池管理和异常处理机制,使得数据库操作更加便捷。 3. JDBC41:这个版本是在Java SE 7中引入的,...
在这个“spring_jdbc_4.0.0.zip”压缩包中,包含的是Spring JDBC 4.0.0版本的jar文件,即“spring-jdbc-4.0.0.jar”。 在Spring JDBC中,最重要的概念是`JdbcTemplate`。这是一个非常实用的工具类,它通过模板方法...
Spring Batch支持多种数据源和持久化方式,包括关系型数据库和JDBC。它使用JobRepository来存储作业的元数据,包括作业执行的记录和统计信息。JobRepository是作业持久化的核心,提供了多种操作和查询方法来管理作业...
9. **性能优化**: 通过批处理(Batch Processing)、连接池(Connection Pooling)和使用预编译的SQL(PreparedStatement)等方式,可以显著提升JDBC应用的性能。 10. **数据库连接关闭**: 在完成数据库操作后,应...
总的来说,【jdbc.rar_jdbc_jdbc系统】提供的资源对于学习和理解如何在实际项目中运用JDBC技术具有很高的价值。通过研究这个系统的代码,我们可以深入理解JDBC的工作原理,掌握数据库操作的最佳实践,并提升我们的...
当我们谈论"Spring+JDBC实例"时,通常是指在Spring框架中使用JDBC进行数据访问的方式,这种方式可以利用Spring提供的便利性,同时保留对数据库的直接控制。 在Spring框架中,JDBC操作被封装在`org.springframework....
此外,对于大数据量处理,JDBC批处理(Batch Processing)是一个重要的优化手段。通过`addBatch()`和`executeBatch()`方法,可以一次性发送多个SQL语句,减少网络往返次数,提高性能。 在源码分析部分,可能会深入...
2. 选用最佳性能的功能:了解并利用JDBC驱动提供的特性,比如批处理(Batch Updates),它可以显著提高插入、更新和删除操作的速度。 3. 管理连接和更新:有效地管理数据库连接,使用连接池可以减少连接创建和销毁...
此外,JDBC驱动还支持预编译的SQL语句(PreparedStatement),批量操作(Batch Updates),以及更高级的功能如存储过程调用,事务控制等。 在开发过程中,确保使用与你的Java环境和SQL Server版本兼容的驱动版本,...
5. **简化数据库操作**:JDBC提供了一些高级功能,如批处理(batch processing),可以一次性执行多个SQL语句,提高性能。此外,JDBC还支持事务处理,确保一组数据库操作要么全部成功,要么全部失败。 6. **静态和...