`
nlslzf
  • 浏览: 1049122 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JDBC性能优化

    博客分类:
  • java
阅读更多
jdbc程序的性能主要由两个因素决定,一是数据库本身的性质,另一个是与数据库相对独立的jdbc应用程序接口(api)的使用。这里说的是如何正确使用jdbc编程接口,以获得更好的性能。

jdbc主要优化有:

1.选择正确的jdbc驱动程序

2.Connention的优化:使用连接池来管理Connection对象
3.Statement的优化:使用批量更新等
4.Result的优化:正确的从数据库中get数据等

(1)选择正确的jdbc驱动程序:
1、jdbc-odbc 桥
2、本地api-部分 java驱动
3、jdbc网路协议-纯java驱动
4、jdbc本地协议

最好选择jdbc网路协议-纯java驱动,效率比较高,但需要第三方软件的支持。比如corba、 weblogic属于这种类型

(2)优化Connection对象:
1、设置适当的参数
DriverManager.getConnection(String url,Properties props);
例如:
Properties props=new Properties();
props.put("user","wuwei");
props.put("password","wuwei");
props.put("defaultRowPrefectch","30");
props.put("dufaultBatchValue","5");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@hostsString",props);
对象可以通过设置setDefaultRowPrefetch(int) 和 setDefaultBatchValue(int) 两个参数类优化连接

2、使用连接池
可以自己写一个连接池,这样程序的灵活性强,便于移植。
    apache项目开发了一套非常通用而表现非常稳定的对象池 http://jakarta.apache.org/commons/pool.htm
    设计了自己的连接池后,在客户端调用建立对象:
public Object makeObject() throws Exception{
  Class.forName("oracle.jdbc.driver.OracalDriver");
  return DriverManager.getConnection("url","username","password");
}
    销毁对象时用:
public void destroyObject(Object obj) throws Exception{
((Connection)obj.close());
}
注意几点:对象池里有没有回收机制,对象池里有机有容量限制,对象池里有多少个闲置对象(可以释放)

3、控制事务的提交
最好手动提交事务,不但可以可以保证数据原子性,而且对新能提高留下余地。
try{
  connection.setAutoCommint(false);
  // 代码用PreparedStatement性能比Statementh好
  connection.commit();
  connection.setAutoCommit(true);
}catch(SQLException e){
}finally{
   //代码
   if(connection!=null){
   connection.close();  
}
}

4、适当的选择事务的隔离级别
TRANSACTION_READ_UNCOMMITED 性能最高
TRANSACTION_READ_COMMITED   快
TRANSACTION_REFEATABLE_READ 中等
RANSACTION_SERIALIZABLE     慢

(3)Statement 优化:
jdbc3个接口用来处理sql的执行,是Statement PreparedStatement CallableStatement提供适当的Statement接口批量执行sql从数据库批量获取数据。
PreparedStatement 比Statement性能要好 主要体现在一个sql语句多次重复执行的情况。
PreparedStatemnt只编译解析一次而Statement每次编译一次。

批量修改数据库
Statement 提供方法addBatch(String)和executeBatch()
调用方法为
stmt.addBatch("isnert.....");
stmt.addBatch("update.....");
stmt.executeBatch();
也可以用PreparedStatement从而更好的提高性能:
pstmt=conn.preparedStatement("insert into test_table(......) values(....?)");
pstmt.setString(1,"aaa");
pstmt.addBatch();
pstmt.setString(1,"bbb");
pstmt.addBatch();
.....
pstmt.executeBatch();

批量地从数据库中取数据:
通过setFetchSize()和getFectchSize()方法来设定和查看这个参数,这个参数对体统的性能影响比较大。这个参数太小会严重地降低程序的性能。
Connection Statement ResultSet都有这个参数,他们对性能地影响顺序是:ResultSet---Statement---Connection

(4)优化ResultSet:
体现在以下几个方面:
批量读取数据.合理设置ResultSet的getFetchSize()和setFetchSize()方法中的参数
使用正确的get和set方法
使用整数而不是字段名作为参数性能比较高

例如:
setInt(1,100);
setString(2,"aaaa");

setInt("id","100");
setString("name","aaaa");
性能好
设置适当的滚动方向。有3个方向FETCH_FORWORD,FETCH_REVERSE FETCH_UNKNOWN,单向滚动性能比较高。

其他方面的性能优化
及时显示的关闭Connection Statement ResultSet,其中Connection可以用Connetion Pool处理。
使用数据库系统的强大查询功能去组织数据。这样程序运行是和数据库服务的交互次数少,数据库返回给程序的记录条数少的多,所以性能有很大的提高。
分享到:
评论
1 楼 xiaowanf 2009-03-02  
天啊,你好厉害!我要向你学习!

相关推荐

    JDBC性能优化.pdf

    ### JDBC性能优化详解 #### 一、引言 在当今数据密集型的应用环境中,Java数据库连接(JDBC)作为Java应用程序与数据库之间的重要桥梁,其性能优化显得尤为重要。本文将根据“JDBC性能优化.pdf”文件提供的信息,...

    优化JDBC方法功略

    本文将详细介绍三个主要的JDBC性能优化技巧,并提供了一些通用的准则,以帮助开发者提高JDBC应用程序的运行效率。 首先,正确使用数据库MetaData方法是关键。MetaData方法通常用于获取数据库表、列、索引等元数据...

    优化JDBC性能的三大技巧.doc

    标题中的“优化JDBC性能的三大技巧”是指在开发基于Java的JDBC应用程序时,为了提升性能而采取的关键策略。这些技巧主要集中在正确使用数据库MetaData方法、只获取必要的数据以及选择最佳性能的功能,并且有效管理...

    JDBC教程

    JDBC性能优化 - 使用PreparedStatement代替Statement,减少SQL解析时间。 - 使用批处理处理大量插入或更新操作。 - 合理设置JDBC连接池大小,避免频繁创建和销毁连接。 - 使用Statement的`setFetchSize()`方法控制...

    jdbc连接池配置(优化连接速度)

    在IT行业中,数据库连接管理是应用系统性能优化的关键环节之一,而JDBC连接池就是解决这一问题的有效工具。本文将详细讲解JDBC连接池的工作原理、配置方法以及如何通过优化来提升连接速度。 JDBC(Java Database ...

    JDBC驱动软件8.0版本

    JDBC性能优化** - 使用PreparedStatement而非Statement,避免SQL注入并提高效率。 - 执行批处理操作,一次性提交多个SQL语句。 - 使用连接池管理数据库连接,避免频繁创建和销毁连接。 - 设置合适的事务隔离级别,...

    spark jdbc 读取并发优化

    然而,在使用Spark与数据库交互时,尤其是使用JDBC(Java Database Connectivity)读取数据时,如果不优化并发度,很容易造成性能瓶颈。特别是在面对大规模数据集时,单线程任务过重会导致任务执行缓慢甚至挂起,...

    JDBC数据库连接JAR包

    3. **JDBC性能优化** - 使用PreparedStatement:预编译的SQL可以提高执行效率,避免SQL注入攻击。 - 批量处理:通过`addBatch()`和`executeBatch()`方法,可以一次性提交多条SQL语句,提高效率。 - 数据库连接池...

    各种数据库的jdbc驱动

    6. **JDBC性能优化**: - 使用PreparedStatement替代Statement,提高SQL执行效率,避免SQL注入问题。 - 分批处理批量插入或更新,减少网络通信次数。 - 使用连接池管理数据库连接,避免频繁创建和销毁连接。 - ...

    sqlserver2000 jdbc(3jar包)

    6. **JDBC性能优化**: - 使用连接池管理数据库连接,可以提高性能并减少资源消耗。 - 对于大数据量操作,考虑使用批处理(Batch Processing)来提升效率。 - 注意调整SQL语句,避免全表扫描,利用索引提高查询速度...

    JDBC API教程与参考手册(第三版)前言+目录+第一,二章

    - 探讨JDBC性能优化策略及最佳实践。 #### 目录概览 - **第1章:JDBC基础** - JDBC简介 - 安装配置指南 - 第一个JDBC程序 - 连接数据库 - 执行SQL语句 - **第2章:JDBC核心API** - DriverManager类详解 - ...

    SQL Server 2005 JDBC Driver.rar

    六、JDBC性能优化 1. 使用PreparedStatement而非Statement,因为PreparedStatement可以被缓存,减少解析和编译的时间。 2. 执行批处理操作,减少网络往返次数。 3. 使用连接池管理数据库连接,避免频繁创建和关闭...

    java_JDBC_5.17_驱动包 (mysql-connector-java-5.1.7-bin.jar)

    4. **JDBC性能优化**: - 使用PreparedStatement代替Statement,可以防止SQL注入,并且预编译的SQL语句通常执行更快。 - 使用批处理操作批量执行SQL语句,提高效率。 - 合理设置连接池,避免频繁的数据库连接创建...

    JDBC高级教程

    10. **JDBC性能优化** 优化JDBC应用包括:减少数据库往返次数(例如,批量处理、联合查询),使用PreparedStatement代替Statement,合理设置连接池参数,以及正确关闭资源等。 总结,JDBC高级教程涵盖了从基础的...

    JDBC 数据库连接总汇

    9. **JDBC性能优化** - 使用PreparedStatement替代Statement,减少解析时间。 - 合理设置批处理大小,避免内存溢出。 - 使用连接池,减少连接创建和销毁的开销。 - 及时关闭结果集、语句和连接,释放资源。 10....

    Mybatis与JDBC批量插入MySQL数据库性能测试

    总的来说,理解和掌握批量插入技术,无论是使用JDBC还是Mybatis,都能帮助我们优化数据库操作,提升系统性能。对于大型项目,合理利用批量插入策略,结合数据库的性能调优,可以显著提高服务响应速度和用户体验。

    java-jdbc-end

    10. **JDBC优化**:使用`PreparedStatement`而非`Statement`,批处理操作,设置合适的缓冲大小,以及及时关闭资源都是常见的JDBC性能优化手段。 综上所述,"java-jdbc-end"这个实例可能涵盖了从连接数据库、执行SQL...

    jdbc技术介绍

    JDBC性能优化 - 使用PreparedStatement代替Statement,预编译SQL可以减少解析时间。 - 使用批处理操作,减少网络通信次数。 - 打开和关闭数据库连接应尽可能快,考虑使用连接池(如C3P0、HikariCP)管理连接,避免...

    iBATIS3与JDBC性能对比

    总结来说,iBATIS3提供了更高的开发效率和易用性,而JDBC则在性能优化和灵活性上有优势。选择哪个取决于项目需求,例如,对于快速开发和维护的小型项目,iBATIS3可能是更好的选择;而对于性能要求极高,且需要深度...

    各类数据库的驱动(jdbc连接)

    6. **JDBC性能优化**: - 使用PreparedStatement代替Statement,以预编译SQL,提高效率并防止SQL注入。 - 使用批处理操作批量执行SQL,减少网络通信次数。 - 及时关闭不再使用的资源,避免内存泄漏。 7. **事务...

Global site tag (gtag.js) - Google Analytics