前言
前些天做项目的性能对比测试,发现新的性能比之前的性能下降了很多,百思不得其解;多方磨难,最后定位到我们使用了DBCP的connection pool,没有打开prepareStatement Cache,打开后,性能就上来了;
老的项目是使用c3p0,里面是使用到了prepareStatement Cache。
正文
今天有空,研究下mysql jdbc driver的实现,发现它内部也做了prepareStatement cache,而且还分server 和 client之分
Server 这里指的是Mysql db server做sql的解析,并返回给jdbc client;Cache的是ServerPrepareStatement
Client 这里指的是jdbc driver解析并并替换?,把最终的sql发给mysql 执行;Cache的是prepareStatement的Parseinfo
所以分别测试了两个的性能对比
for (int i = 0; i < 10000; i++) {
PreparedStatement stmt = conn.prepareStatement("select * from race");
stmt.execute();
stmt.close();
|
设置 |
耗时 |
client |
useServerPrepStmts=false |
2669ms |
server |
useServerPrepStmts=true |
4334ms |
测试硬件:
64位 osx
i5 2core
原因
TODO
分享到:
相关推荐
这个资源提供的示例代码将帮助开发者深入理解如何在实际项目中运用JDBC的PrepareStatement进行MySQL操作,无论是简单的查询、更新,还是复杂的批量处理,都有详细的示例作为参考。学习并掌握这些内容,对于提升Java...
PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "John Doe"); pstmt.setString(2, "john@example.com"); pstmt.executeUpdate(); ``` 5. **处理结果集**:如果SQL语句是查询,...
`或`PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM mytable WHERE id = ?");` 4. 执行查询或更新:调用Statement或PreparedStatement的方法执行SQL,如`ResultSet rs = stmt.executeQuery();`或`...
PreparedStatement pstmt = conn.prepareStatement(query); pstmt.setInt(1, 123); ResultSet rs = pstmt.executeQuery(); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); ...
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO table (column1, column2) VALUES (?, ?)"); ``` 4. 执行SQL:使用Statement或PreparedStatement对象执行SQL查询、插入、更新或删除操作。 ```java...
在实现分页时,`OFFSET`常与`LIMIT`一起使用,以确定起始位置。 以下是一个简单的Java代码示例,展示了如何使用JDBC执行带有`LIMIT`和`OFFSET`的SQL查询: ```java int pageSize = 10; // 每页记录数 int pageNum ...
1. **本地类路径**:将`mysql-jdbc.jar`复制到项目的`lib`目录下,并在编译和运行时确保该目录包含在类路径中。 2. **Maven或Gradle依赖**:如果项目使用Maven或Gradle构建,可以在`pom.xml`或`build.gradle`文件中...
pstmt = conn.prepareStatement(sql); for (int i = 0; i ; i++) { pstmt.setObject(i + 1, params[i]); } rs = pstmt.executeQuery(); while (rs.next()) { Map, Object> row = new HashMap(); int column...
以下将详细介绍如何通过JDBC在Servlet中连接MySQL数据库并实现这些基本操作。 首先,确保已经安装了MySQL数据库,并创建了一个数据库和相应的表。在Java项目中,我们需要引入MySQL的JDBC驱动,通常通过Maven或...
总的来说,Java JDBC与MySQL的结合使得开发人员能够轻松地在Java应用中实现对数据库的操作,而这个资源"Java_MySQL_JDBC.rar"就是这样一个实践学习的好工具。通过研究这些样例,你可以深入理解JDBC的工作原理,并...
try (PreparedStatement pstmt = conn.prepareStatement(insert)) { pstmt.setString(1, value1); pstmt.setString(2, value2); pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } ```...
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO mytable VALUES (?, ?)"); ``` 4. 执行SQL语句。 5. 处理结果集,如果有的话。 6. 关闭资源:在操作完成后,记得关闭Statement、Connection和其他...
本教程将深入探讨如何使用JDBC连接MySQL数据库并实现增、删、改、查(CRUD)操作。首先,我们需要确保已经安装了MySQL数据库,并且在系统中配置了相应的驱动。 1. **引入MySQL JDBC驱动** 要使用JDBC与MySQL通信,...
本教程将详细介绍如何使用JDBC连接MySQL数据库,实现数据的增、删、改、查操作,这对于初学者来说是一个重要的学习起点。 首先,确保你的系统中已经安装了MySQL数据库并创建了一个数据库实例。接下来,你需要获取...
PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "John Doe"); pstmt.setInt(2, 30); int rowsInserted = pstmt.executeUpdate(); if (rowsInserted > 0) { System.out.println("A new ...
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO mytable VALUES (?, ?)"); pstmt.setString(1, "value1"); pstmt.setInt(2, 123); pstmt.executeUpdate(); ``` 5. **处理ResultSet**: `...
在Java编程领域,JDBC(Java Database Connectivity)是Oracle公司提供的一个标准接口,它使得Java程序可以连接到各种类型的数据库,包括MySQL。本资源“JAVA连mysql源码包JDBC”提供了一个使用JDBC连接MySQL数据库...
然而,在某些特定场景下,直接使用Java Database Connectivity (JDBC)接口来访问MySQL数据库可以提供更为灵活且高效的数据访问机制。 #### 二、Android应用中使用JDBC访问MySQL的原理与步骤 ##### 2.1 原理简介 ...
PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setInt(1, pageSize); // 每页记录数 pstmt.setInt(2, (currentPage - 1) * pageSize); // 偏移量 ResultSet rs = pstmt.executeQuery(); ``` ...
3. 获取Statement或PreparedStatement对象:通过连接对象的`createStatement()`或`prepareStatement()`方法创建用于执行SQL语句的对象。 4. 执行SQL:调用Statement或PreparedStatement对象的`executeQuery()`或`...