- 浏览: 254708 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (232)
- 瞎扯两句 (8)
- 操作系统 (5)
- 工作笔记 (33)
- 设计模式 (1)
- java (57)
- Java IDE (7)
- hibernate (17)
- oracle (46)
- ms sql (2)
- spring (9)
- struts2 (0)
- javascript (16)
- java_code (2)
- java之集合 (2)
- java之线程 (4)
- java之IO (4)
- java之虚拟机 (6)
- java之异常 (0)
- EJB (4)
- XML (4)
- 数据结构-算法 (2)
- 架构设计 (5)
- 配置信息 (2)
- 阅读笔记 (6)
- IT专业英语 (1)
- PI (0)
- 单元测试 (1)
最新评论
相比Hibernate、iBatis、DBUtils等,理论上JDBC的性能都超过它们。JDBC提供更底层更精细的数据访问策略,这是Hibernate等框架所不具备的。
在一些高性能的数据操作中,越高级的框架越不适合使用。这里是我在开发中对JDBC使用过程中一些优化经验总结。
1、选择纯Java的JDBC驱动。
2、使用连接池--使用一个“池”来管理JDBC连接,并精心调试池配置的参数,目前可用的数据库连接池很多很多。
如何配置合适的参数呢,需要的是测试,而不是感觉。
3、重用Connection--最大限度使用每个数据库连接,得到了就不要轻易“丢弃”。
有时候在一个过程中,会多次操作数据库,而仅仅需要一个连接就够了,没必用一次就获取一个连接,用完后关闭或者入池。这样会增加“池”管理的成本,千万别以为你用了“池”就可以随便申请和归还连接,都是有代价的。如果是一个庞大循环块中操作数据库,更应该注意此问题!
4、重用Statement--对于一些预定义SQL,设置为静态常量,并尽可能重用预定义SQL产生的PreparedStatement对象。对于多次使用一种模式的SQL,使用预定义SQL可以获取更好的性能。
5、使用批处理SQL。
可以批量执行混合模式的SQL、有预定义的,还有静态的
String sql = "insert into testdb.book (kind, name) values (?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "java");
pstmt.setString(2, "jjjj");
pstmt.addBatch(); //添加一次预定义参数
pstmt.setString(1, "ccc");
pstmt.setString(2, "dddd");
pstmt.addBatch(); //再添加一次预定义参数
//添加一次静态SQL
pstmt.addBatch("update testdb.book set kind = 'JAVA' where kind='java'");
//批量执行预定义SQL
pstmt.executeBatch();
6、优化结果集ResultSet--查询时候,返回的结果集有不同的类型,优先选择只读结果集、不可滚动的属性。
优化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
单向滚动性能比较高.
7、事物优化--如果数据库不支持事物,就不要写回滚代码,如果不考虑事物,就不要做事务的控制。
8、安全优化--管理好你的Connection对象,在异常时候能“入池”或者关闭。因此应该将Connection释放的代码写在异常处理的finally块中。
9、异常处理优化--不要轻易吞噬SQLException,对于DAO、Service层次的数据访问,一般在DAO中跑出异常,在Service中处理异常。但DAO中也可以处理异常,并做转义抛出,不要随便抛出RuntimeExeption,因为这是JVM抛出的,不需要你可以去抛出,因为RuntimeException往往会导致系统挂起。
10、代码高层优化--在以上的基础上,优化封装你的数据访问方式,尽可能让代码简洁好维护,如果你还觉得性能不行,那就该从整个系统角度考虑优化了,比如加上缓存服务器,集群、负载均衡、优化数据库服务器等等,以获取更好的系能。
在一些高性能的数据操作中,越高级的框架越不适合使用。这里是我在开发中对JDBC使用过程中一些优化经验总结。
1、选择纯Java的JDBC驱动。
2、使用连接池--使用一个“池”来管理JDBC连接,并精心调试池配置的参数,目前可用的数据库连接池很多很多。
如何配置合适的参数呢,需要的是测试,而不是感觉。
3、重用Connection--最大限度使用每个数据库连接,得到了就不要轻易“丢弃”。
有时候在一个过程中,会多次操作数据库,而仅仅需要一个连接就够了,没必用一次就获取一个连接,用完后关闭或者入池。这样会增加“池”管理的成本,千万别以为你用了“池”就可以随便申请和归还连接,都是有代价的。如果是一个庞大循环块中操作数据库,更应该注意此问题!
4、重用Statement--对于一些预定义SQL,设置为静态常量,并尽可能重用预定义SQL产生的PreparedStatement对象。对于多次使用一种模式的SQL,使用预定义SQL可以获取更好的性能。
5、使用批处理SQL。
可以批量执行混合模式的SQL、有预定义的,还有静态的
String sql = "insert into testdb.book (kind, name) values (?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "java");
pstmt.setString(2, "jjjj");
pstmt.addBatch(); //添加一次预定义参数
pstmt.setString(1, "ccc");
pstmt.setString(2, "dddd");
pstmt.addBatch(); //再添加一次预定义参数
//添加一次静态SQL
pstmt.addBatch("update testdb.book set kind = 'JAVA' where kind='java'");
//批量执行预定义SQL
pstmt.executeBatch();
6、优化结果集ResultSet--查询时候,返回的结果集有不同的类型,优先选择只读结果集、不可滚动的属性。
优化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
单向滚动性能比较高.
7、事物优化--如果数据库不支持事物,就不要写回滚代码,如果不考虑事物,就不要做事务的控制。
8、安全优化--管理好你的Connection对象,在异常时候能“入池”或者关闭。因此应该将Connection释放的代码写在异常处理的finally块中。
9、异常处理优化--不要轻易吞噬SQLException,对于DAO、Service层次的数据访问,一般在DAO中跑出异常,在Service中处理异常。但DAO中也可以处理异常,并做转义抛出,不要随便抛出RuntimeExeption,因为这是JVM抛出的,不需要你可以去抛出,因为RuntimeException往往会导致系统挂起。
10、代码高层优化--在以上的基础上,优化封装你的数据访问方式,尽可能让代码简洁好维护,如果你还觉得性能不行,那就该从整个系统角度考虑优化了,比如加上缓存服务器,集群、负载均衡、优化数据库服务器等等,以获取更好的系能。
发表评论
-
oracle sql优化
2013-09-23 14:29 6591.绑定变量 不适用在OLAP系统中。 因为在OLAP中, ... -
阅读笔记 SQL
2013-08-14 18:24 830Start with...Connect By子句递归查询一般 ... -
oracle 锁 分析
2013-06-18 10:57 4801. 分为 tx 和 tm 。 即 行级 和 表级 其中 ... -
Oracle的TX锁(行级锁、事务锁)
2013-06-18 10:04 940问题:如何使用事务? ... -
mysql 时间戳自动更新
2013-04-09 10:24 984-- Table "pnodetail" ... -
阅读笔记
2013-02-07 17:24 431. 在OLTP系统装要注意sql的硬解析,但是在OLA ... -
synonym
2013-02-07 16:58 956建立一个同义词可以排除一个对象名字的限制. 如果你的数据库有多 ... -
oracle schema
2013-02-07 16:50 765A schema is a collection of dat ... -
物化视图的使用分析
2013-02-05 17:27 7871. 在 深入浅出 系列中,作者列举了一个例子来说明。 ... -
Oracle编程艺术阅读笔记-2
2013-01-29 10:40 7771. 位图索引。 不 ... -
Oracle:位图索引与死锁-2
2013-01-28 18:24 838位图索引被存储为压缩的索引值,其中包含了一个范围内的ROWID ... -
Oracle:位图索引与死锁-1
2013-01-28 18:04 870B 树索引更适合索引动态表的 OLTP 环境,而位图索引更适合 ... -
Oracle编程艺术阅读笔记-1
2013-01-24 18:48 8731. 绑定变量。 不使用会产生的影响: 每次运 ... -
JAVA完全控制Oracle中BLOB、CLOB说明
2012-12-28 17:07 852网络上很多关于JAVA对Oracle中BLOB、CLOB类型字 ... -
H2数据库的使用
2012-12-13 18:40 7731.下载h2的jar,例如h2-1.3.170.jar 2.c ... -
JTA
2012-12-05 17:35 976要理解 JTA 的实现原理 ... -
oracle 体系结构
2012-12-03 23:13 721[img][/img] oracle工作原理 ... -
oracle 存储过程实例-4
2012-12-03 23:04 542--错误处理部分。 --自 ... -
oracle 存储过程实例-4
2012-12-03 23:02 846--错误处理部分。 --自定义异常处理 CREATE OR ... -
oracle 存储过程实例-3
2012-12-03 21:42 816PROCEDURE autoissuereturns ( ...
相关推荐
本文将详细介绍在Weblogic 9/10版本中针对JDBC优化的相关知识和技术要点,包括配置参数的选择、优化方法以及监控策略等。 #### 二、Weblogic中的JDBC配置与优化 ##### 1. 配置文件概述 在Weblogic中,主要涉及三种...
然而,在使用Spark与数据库交互时,尤其是使用JDBC(Java Database Connectivity)读取数据时,如果不优化并发度,很容易造成性能瓶颈。特别是在面对大规模数据集时,单线程任务过重会导致任务执行缓慢甚至挂起,...
标题“优化JDBC方法攻略”和描述中提到的是关于JDBC(Java Database Connectivity)数据库操作的性能优化,适合初学者和教学使用。本文将详细介绍三个主要的JDBC性能优化技巧,并提供了一些通用的准则,以帮助开发者...
JDBC 数据连接优化 JDBC(Java Database Connectivity)是一种标准的Java API,用于与关系数据库进行交互。 JDBC 提供了一个统一的接口来访问不同的关系数据库,例如 Oracle、MySQL、SQL Server 等。 在本文中,...
在优化数据库连接方面,JDBC扮演着至关重要的角色,尤其是在处理大量并发请求和移动设备的场景中。 数据库连接的管理是性能优化的关键。通常,频繁地创建和关闭数据库连接会消耗大量的系统资源,导致性能下降。为了...
以下是一些JDBC优化策略: 1. **批处理(Batch Processing)**:对于一系列相似的SQL操作,如批量插入或更新,使用批处理能显著提高性能,减少网络往返次数。 2. **PreparedStatement**:预编译的SQL语句比...
### JDBC优化技巧 1. **批处理**:通过Statement对象的`addBatch()`和`executeBatch()`方法,可以将多个SQL语句作为一个批次执行,提高性能。 2. **使用PreparedStatement**:预编译SQL语句,减少解析次数,提升...
在IT行业中,数据库连接管理是应用系统性能优化的关键环节之一,而JDBC连接池就是解决这一问题的有效工具。本文将详细讲解JDBC连接池的工作原理、配置方法以及如何通过优化来提升连接速度。 JDBC(Java Database ...
在实际应用中,开发者可以根据具体情况进行权衡,甚至结合两者的优点,例如使用Hibernate进行常规操作,而在性能关键点采用JDBC优化。重要的是理解它们的工作原理,以便在不同的开发环境下做出明智的决策。
JDBC优化技巧** - 使用PreparedStatement而非Statement,因为预编译的SQL可以提高执行速度,并防止SQL注入。 - 批量处理(`addBatch()`和`executeBatch()`)可以减少网络通信,提高效率。 - 使用连接池,减少连接...
五、JDBC优化技巧 1. 使用PreparedStatement以减少SQL解析时间,避免SQL注入攻击。 2. 批量处理:通过`Statement.addBatch()`和`Statement.executeBatch()`批量执行SQL,提高效率。 3. 数据库连接池:使用...
### JDBC优化技巧 1. **批处理(Batch Processing)**:多个SQL语句可以一起提交,提高性能。 2. **使用连接池(Connection Pool)**:避免频繁创建和关闭连接,减少系统开销。 3. **设置合适的缓冲大小**:调整`...
JDBC优化技巧** - 使用PreparedStatement替代Statement,减少SQL解析时间。 - 使用批处理操作(`addBatch()`和`executeBatch()`)批量执行SQL,提升性能。 - 合理设置连接池,避免频繁创建和销毁连接。 - 使用连接...
JDBC优化** - 使用批处理:`pstmt.addBatch();`和`pstmt.executeBatch();` - 使用PreparedStatement代替Statement,减少解析SQL的时间。 - 关闭资源:`rs.close(); pstmt.close(); conn.close();`以释放数据库连接...
9. **JDBC优化技巧** - 使用PreparedStatement而非Statement,减少SQL解析次数。 - 适当调整数据库连接池大小,避免过多的连接创建与销毁。 - 使用批处理处理大量数据操作。 - 及时关闭数据库资源,防止资源泄露...
7. JDBC优化: - 使用PreparedStatement代替Statement,减少SQL解析时间。 - 使用批处理(Batch Updates)提高批量插入或更新的效率。 - 使用连接池(Connection Pool)管理数据库连接,避免频繁创建和关闭连接。...
7. **JDBC优化** - 使用PreparedStatement代替Statement,减少解析SQL的时间。 - 使用批处理执行多条相似的SQL语句。 - 合理设置JDBC连接参数,如超时、缓冲大小等。 - 使用连接池管理数据库连接。 8. **JDBC与...
**JDBC优化**: - 使用PreparedStatement而非Statement。 - 执行批量操作。 - 使用连接池。 - 合理设置Statement的fetchSize和结果集类型。 - 避免过多的数据库交互,尽可能减少网络延迟。 以上是JDBC的基本概念、...
7. **JDBC优化** - 使用连接池:例如C3P0、HikariCP或Apache DBCP,提高数据库连接的复用性,减少创建和销毁连接的开销。 - 分页查询:避免一次性加载大量数据,使用`LIMIT`和`OFFSET`或`RowNumber()`等方法实现...
5. **JDBC优化技巧**: - 使用PreparedStatement替代Statement,可以防止SQL注入,提高执行效率。 - 使用批处理(Batch Processing)可以批量提交SQL语句,减少网络往返次数。 - 合理设置连接池,避免频繁创建和...