一、使用Statement而不是PreparedStatement对象
JDBC驱动的最佳化是基于使用的是什么功能. 选择PreparedStatement还是Statement取决于你要怎么使用它们. 对于只执行一次的SQL语句选择Statement是最好的. 相反, 如果SQL语句被多次执行选用PreparedStatement是最好的.
PreparedStatement的第一次执行消耗是很高的. 它的性能体现在后面的重复执行. 例如, 假设我使用Employee ID, 使用prepared的方式来执行一个针对Employee表的查询. JDBC驱动会发送一个网络请求到数据解析和优化这个查询. 而执行时会产生另一个网络请求. 在JDBC驱动中,减少网络通讯是最终的目的. 如果我的程序在运行期间只需要一次请求, 那么就使用Statement. 对于Statement, 同一个查询只会产生一次网络到数据库的通讯.
对于使用PreparedStatement池的情况下, 本指导原则有点复杂. 当使用PreparedStatement池时, 如果一个查询很特殊, 并且不太会再次执行到, 那么可以使用Statement. 如果一个查询很少会被执行,但连接池中的Statement池可能被再次执行, 那么请使用PreparedStatement. 在不是Statement池的同样情况下, 请使用Statement.
二、使用PreparedStatement的Batch功能
Update大量的数据时, 先Prepare一个INSERT语句再多次的执行, 会导致很多次的网络连接. 要减少JDBC的调用次数改善性能, 你可以使用PreparedStatement的AddBatch()方法一次性发送多个查询给数据库. 例如, 让我们来比较一下下面的例子.
例 1: 多次执行Prepared Statement
PreparedStatement ps = conn.prepareStatement(
"INSERT into employees values (?, ?, ?)");
for (n = 0; n < 100; n++) {
ps.setString(name[n]);
ps.setLong(id[n]);
ps.setInt(salary[n]);
ps.executeUpdate();
}
例 2: 使用Batch
PreparedStatement ps = conn.prepareStatement(
"INSERT into employees values (?, ?, ?)");
for (n = 0; n < 100; n++) {
ps.setString(name[n]);
ps.setLong(id[n]);
ps.setInt(salary[n]);
ps.addBatch();
}
ps.executeBatch();
在例 1中, PreparedStatement被用来多次执行INSERT语句. 在这里, 执行了100次INSERT操作, 共有101次网络往返. 其中,1次往返是预储statement, 另外100次往返执行每个迭代. 在例2中, 当在100次INSERT操作中使用addBatch()方法时, 只有两次网络往返. 1次往返是预储statement, 另一次是执行batch命令. 虽然Batch命令会用到更多的数据库的CPU周期, 但是通过减少网络往返,性能得到提高. 记住, JDBC的性能最大的增进是减少JDBC驱动与数据库之间的网络通讯.
注:Oracel 10G的JDBC Driver限制最大Batch size是16383条,如果addBatch超过这个限制,那么executeBatch时就会出现“无效的批值”(Invalid Batch Value) 异常。因此在如果使用的是Oracle10G,在此bug减少前,Batch size需要控制在一定的限度。
分享到:
相关推荐
在Java编程中,...通过这个练习,你可以深入理解PreparedStatement的用法,以及如何安全地插入数据到数据库。同时,这也是一个很好的机会去学习数据库连接管理、事务控制和异常处理等Java数据库编程的基础知识。
总之,理解和充分利用`PreparedStatement`和连接池中的`PreparedStatement Cache`,能够显著提升Java应用在数据库操作上的性能,降低系统资源消耗,提升用户体验。在实际开发中,应结合具体的数据库系统和业务需求,...
在深入理解JDBC之前,我们先来了解几个基本概念: 1. **驱动程序类型**: - JDBC-ODBC桥接驱动:早期的解决方案,通过ODBC接口与数据库通信。 - 网络纯Java驱动(Type 2):使用本地协议与数据库服务器通信,但...
通过上述内容,我们了解了JDBC的运作机制,掌握了使用Statement和PreparedStatement的关键点,以及如何进行事务管理和结果集处理。这些知识对于开发和维护数据库驱动的Java应用程序具有重要的参考价值。
这个资源提供的示例代码将帮助开发者深入理解如何在实际项目中运用JDBC的PrepareStatement进行MySQL操作,无论是简单的查询、更新,还是复杂的批量处理,都有详细的示例作为参考。学习并掌握这些内容,对于提升Java...
其中,DriverManager负责管理数据库驱动,Connection代表数据库连接,Statement和PreparedStatement用于执行SQL语句,ResultSet存储查询结果。 根据驱动程序的实现方式,JDBC驱动分为4种类型: - Type 1:纯Java ...
- 创建Statement对象:用于执行SQL语句,分为Statement、PreparedStatement和CallableStatement三种。 - 执行SQL:调用Statement对象的executeQuery()或executeUpdate()方法执行SQL。 - 处理结果集:当执行查询...
**JDBC编程笔记** JDBC(Java Database Connectivity)是Java语言中用来规范客户端程序如何连接数据库的应用程序...这份笔记详尽地介绍了JDBC的关键概念和实践技巧,有助于读者深入理解并有效运用JDBC进行数据库操作。
JDBC的核心组件包括DriverManager、Connection、Statement、PreparedStatement和ResultSet等。 1. DriverManager:这是JDBC中的一个关键类,负责管理数据库驱动程序。当程序需要与数据库建立连接时,会通过...
主要组件包括DriverManager、Connection、Statement、PreparedStatement和ResultSet等。 2. DriverManager类: DriverManager是JDBC的入口点,负责管理数据库驱动。在程序启动时,我们通常会通过Class.forName()...
它包括了多个接口和类,如Connection、Statement、PreparedStatement、ResultSet等,这些组件构成了JDBC的核心。 二、JDBC工作流程 1. 加载驱动:在使用JDBC前,我们需要加载对应的数据库驱动,这通常通过Class.for...
4. 创建Statement或PreparedStatement:根据需求创建Statement对象执行简单的SQL,或者使用PreparedStatement对象执行预编译的SQL,以提高性能和安全性。 5. 执行SQL:调用Statement或PreparedStatement的...
1. JDBC基础:理解JDBC API的核心组件,如DriverManager、Connection、Statement、PreparedStatement和ResultSet。学习如何加载数据库驱动,建立与数据库的连接,并执行SQL语句。 2. 数据库连接池:了解如何使用...
本教程旨在帮助初学者深入理解Java数据库连接(Java Database Connectivity,简称JDBC)的基础知识,通过源码实践和详细的说明书,你可以自行运行示例,加深对JDBC的理解。以下将分别介绍JDBC的核心概念、接口、数据...
在实验中,你可以尝试实现一个简单的数据库连接示例,如创建表、插入数据、查询数据和更新数据等操作,从而对JDBC有更深入的理解。 通过这个实验,初学者不仅可以熟悉JDBC的基本操作,还能理解数据库连接的概念,...
在本实验“Lab3-JDBC-code_jdbc_”中,我们将深入理解JDBC的核心概念、工作原理以及如何使用JDBC进行数据库操作。 首先,JDBC提供了七种主要接口和类,它们构成了JDBC API的基础: 1. **DriverManager**: 这是JDBC...
学习这一章的内容,开发者应深入理解JDBC的工作原理,熟悉各种数据库连接模式,掌握JDBC API的使用,并能编写出高效、健壮的数据库应用程序。通过实践,可以更好地理解和应用这些知识,为后续的Java数据库编程打下...
这份资料可能由彭涛精心整理,旨在帮助初学者或有经验的开发者深入理解并熟练掌握JDBC技术。 在学习JDBC时,首先要了解其基本概念。JDBC提供了一种标准的API,使得Java程序能够连接到数据库、执行SQL语句、处理结果...
3. 创建Statement或PreparedStatement:根据需求创建Statement或PreparedStatement对象。 4. 执行SQL:调用Statement或PreparedStatement的方法执行SQL语句。 5. 处理结果:如果SQL是查询,获取并处理ResultSet。 6....