对于数据库连接池,可以通过修改池的Connection、(Prepared)Statement属性,来优化连接池;
当我们使用JDBC进行数据库操作时,如何使用Connection、PreparedStatement、Statement,就会影响数据库的性能;
一、使用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功能
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();
三、获取自动生成的键值
int rowcount = stmt.executeUpdate ( "insert into LocalGeniusList (name) values ('Karen')", // 插入行并返回键值 Statement.RETURN_GENERATED_KEYS); ResultSet rs = stmt.getGeneratedKeys (); // 得到生成的键值
四、获取ResultSet
由于数据库系统对可滚动光标的支持有限, 许多JDBC驱动程序并没有实现可滚动光标. 除非你确信数据库支持可滚动光标的结果集, 否则不要调用rs.last()和rs.getRow()方法去找出数据集的最大行数. 因为JDBC驱动程序模拟了可滚动光标, 调用rs.last()导致了驱动程序透过网络移到了数据集的最后一行. 取而代之, 你可以用ResultSet遍历一次计数或者用SELECT查询的COUNT函数来得到数据行数.
相关推荐
Java 中 PreparedStatement 和 Statement 的区别 Java 中的 PreparedStatement 和 Statement 都是用于执行 SQL 语句的接口,但是它们之间存在一些关键的区别。 首先,从数据库执行 SQL 语句的角度来看,使用 ...
在Java编程中,数据库操作是常见任务之一,而`PreparedStatement`和`Statement`是Java JDBC(Java Database Connectivity)中用于执行SQL语句的两种主要接口。它们都是`java.sql`包下的类,用来与数据库进行交互,但...
Statement和PreparedStatement之间的区别 Statement和PreparedStatement是JDBC中的两种不同的语句对象,用于执行数据库操作。虽然它们都可以执行SQL语句,但是它们之间存在着很大的区别。 首先, Statement对象...
jdbc中preparedStatement比Statement的好处
Java面试题34.jdbc中preparedStatement比Statement的好处.mp4
解决方案的关键在于创建三个代理类:_Connection、_Statement和_ResultSet。_Connection作为Connection接口的代理,拦截并修改获取PreparedStatement和Statement实例的方法,确保返回的是经过代理的实例。_Statement...
7. 最后,记得关闭所有的资源,包括ResultSet、Statement和Connection,以避免资源泄漏。 总结来说,Java与DB2数据库的交互涉及加载JDBC驱动、建立连接、创建PreparedStatement或Statement对象、执行SQL并处理结果...
prepareStatement和Statement的区别 prepareStatement和Statement是 Java 中两个常用的数据库操作接口,它们都可以用来执行 SQL 语句,但是它们之间有着明显的区别。 首先,从创建时的区别开始,Statement 需要...
JDBC主要接口包括DriverManager、Connection、PreparedStatement、Statement和ResultSet等。DriverManager用于管理数据库驱动程序,而Connection代表与数据库的连接。PreparedStatement和Statement用于执行SQL语句,...
NULL 博文链接:https://chaoyi.iteye.com/blog/2088080
##### 3.1 PreparedStatement和Statement的对比(面试题) - **PreparedStatement**:提供了预编译的功能,可以提高执行效率和安全性,尤其适用于多次执行相同的SQL语句的情况。 - **Statement**:直接执行SQL语句...
正确地选择`Statement`和`PreparedStatement`以及适时地关闭它们对于保证应用程序的性能和稳定性至关重要。理解它们之间的区别,并根据实际需求选择合适的方法,能够显著提升应用的质量。同时,合理管理`Connection`...
5. **PreparedStatement和Statement**:在Java中,我们通常使用Statement或PreparedStatement来执行SQL语句。Statement适用于简单查询,而PreparedStatement可以防止SQL注入攻击,同时提供更好的性能,因为它可以预...
2. **PreparedStatement和Statement**:为了执行SQL查询,程序可能使用`Statement`或更安全的`PreparedStatement`对象。`PreparedStatement`可以防止SQL注入,并且在需要多次执行相同SQL语句时提高性能。 3. **...
7. **Statement类型**:解释PreparedStatement和Statement的区别,以及iBatis如何使用PreparedStatement来防止SQL注入。 8. **结果映射**:阐述如何映射SQL查询结果到Java对象,包括基本类型、复杂类型的映射,以及...
一种可能的方法是通过日志配置,例如,启用MySQL的`Statement`和`PreparedStatement`日志,这样在执行时会打印出详细的SQL语句。 另外,开发工具如IntelliJ IDEA、Eclipse等,或者数据库管理工具如MySQL Workbench...
在每次操作完成后,记得关闭PreparedStatement和Statement对象,然后归还Connection到连接池,而不是直接关闭连接。这可以通过try-with-resources语句自动完成,以确保资源的正确释放。 在JdbcDemo这个示例中,可能...
在这个例子中,首先定义了一个包含占位符的SQL语句,接着通过`connection`对象的`prepareStatement`方法创建`PreparedStatement`实例,然后通过`setInt`和`setString`方法设置参数值,最后调用`executeQuery`方法...
`PreparedStatement`是`Statement`接口的子接口,用于预编译SQL语句,并可以重复执行这些预编译过的SQL语句。这不仅能够提高应用程序的性能,还能提高安全性,因为它支持参数化查询,避免了SQL注入的风险。 #### 二...