`
lixjluck
  • 浏览: 105224 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JDBC的PrepareStatement在mysql下的实现

 
阅读更多

前言

前些天做项目的性能对比测试,发现新的性能比之前的性能下降了很多,百思不得其解;多方磨难,最后定位到我们使用了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

分享到:
评论
1 楼 lionbule 2011-12-23  
http://blog.csdn.net/axman/article/details/6913527
看下这个~兴许能帮你忙

相关推荐

    JDBC PrepareStatement 使用(附各种场景 demo)

    这个资源提供的示例代码将帮助开发者深入理解如何在实际项目中运用JDBC的PrepareStatement进行MySQL操作,无论是简单的查询、更新,还是复杂的批量处理,都有详细的示例作为参考。学习并掌握这些内容,对于提升Java...

    JDBC:MySQL8.0.29驱动

    PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "John Doe"); pstmt.setString(2, "john@example.com"); pstmt.executeUpdate(); ``` 5. **处理结果集**:如果SQL语句是查询,...

    mysql的JDBC驱动包

    `或`PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM mytable WHERE id = ?");` 4. 执行查询或更新:调用Statement或PreparedStatement的方法执行SQL,如`ResultSet rs = stmt.executeQuery();`或`...

    sql和mysql jdbc包

    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"); ...

    最新版 JDBC,版本号为mysql-connector-java-8.0.16

    PreparedStatement pstmt = conn.prepareStatement("INSERT INTO table (column1, column2) VALUES (?, ?)"); ``` 4. 执行SQL:使用Statement或PreparedStatement对象执行SQL查询、插入、更新或删除操作。 ```java...

    JDBC分页 物理分页 mysql实现

    在实现分页时,`OFFSET`常与`LIMIT`一起使用,以确定起始位置。 以下是一个简单的Java代码示例,展示了如何使用JDBC执行带有`LIMIT`和`OFFSET`的SQL查询: ```java int pageSize = 10; // 每页记录数 int pageNum ...

    mysql-jdbc

    1. **本地类路径**:将`mysql-jdbc.jar`复制到项目的`lib`目录下,并在编译和运行时确保该目录包含在类路径中。 2. **Maven或Gradle依赖**:如果项目使用Maven或Gradle构建,可以在`pom.xml`或`build.gradle`文件中...

    jdbc连接mysql工具类

    pstmt = conn.prepareStatement(sql); for (int i = 0; i ; i++) { pstmt.setObject(i + 1, params[i]); } rs = pstmt.executeQuery(); while (rs.next()) { Map, Object&gt; row = new HashMap(); int column...

    jdbc连接mysql

    以下将详细介绍如何通过JDBC在Servlet中连接MySQL数据库并实现这些基本操作。 首先,确保已经安装了MySQL数据库,并创建了一个数据库和相应的表。在Java项目中,我们需要引入MySQL的JDBC驱动,通常通过Maven或...

    Java_MySQL_JDBC.rar_JDBC程序_java jdbc mysql_java mysql jd_jdbc 样例

    总的来说,Java JDBC与MySQL的结合使得开发人员能够轻松地在Java应用中实现对数据库的操作,而这个资源"Java_MySQL_JDBC.rar"就是这样一个实践学习的好工具。通过研究这些样例,你可以深入理解JDBC的工作原理,并...

    JDBC示例项目(针对mySQL)

    try (PreparedStatement pstmt = conn.prepareStatement(insert)) { pstmt.setString(1, value1); pstmt.setString(2, value2); pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } ```...

    MySQL-JDBC驱动包

    PreparedStatement pstmt = conn.prepareStatement("INSERT INTO mytable VALUES (?, ?)"); ``` 4. 执行SQL语句。 5. 处理结果集,如果有的话。 6. 关闭资源:在操作完成后,记得关闭Statement、Connection和其他...

    mysql-connector-java-5.1.35 MySQL的jdbc驱动jar

    3. 获取Statement或PreparedStatement对象:通过连接对象的`createStatement()`或`prepareStatement()`方法创建用于执行SQL语句的对象。 4. 执行SQL:调用Statement或PreparedStatement对象的`executeQuery()`或`...

    jdbc连接mysql数据库,实现增删改查

    本教程将深入探讨如何使用JDBC连接MySQL数据库并实现增、删、改、查(CRUD)操作。首先,我们需要确保已经安装了MySQL数据库,并且在系统中配置了相应的驱动。 1. **引入MySQL JDBC驱动** 要使用JDBC与MySQL通信,...

    JDBC连接Mysql数据库

    本教程将详细介绍如何使用JDBC连接MySQL数据库,实现数据的增、删、改、查操作,这对于初学者来说是一个重要的学习起点。 首先,确保你的系统中已经安装了MySQL数据库并创建了一个数据库实例。接下来,你需要获取...

    Mysql-JDBC驱动架包

    PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "John Doe"); pstmt.setInt(2, 30); int rowsInserted = pstmt.executeUpdate(); if (rowsInserted &gt; 0) { System.out.println("A new ...

    关于MySQL与MSSQL的JDBC访问实现例程

    PreparedStatement pstmt = conn.prepareStatement("INSERT INTO mytable VALUES (?, ?)"); pstmt.setString(1, "value1"); pstmt.setInt(2, 123); pstmt.executeUpdate(); ``` 5. **处理ResultSet**: `...

    JAVA连mysql源码包JDBC

    在Java编程领域,JDBC(Java Database Connectivity)是Oracle公司提供的一个标准接口,它使得Java程序可以连接到各种类型的数据库,包括MySQL。本资源“JAVA连mysql源码包JDBC”提供了一个使用JDBC连接MySQL数据库...

    android通过JDBC直接访问Mysql数据库

    然而,在某些特定场景下,直接使用Java Database Connectivity (JDBC)接口来访问MySQL数据库可以提供更为灵活且高效的数据访问机制。 #### 二、Android应用中使用JDBC访问MySQL的原理与步骤 ##### 2.1 原理简介 ...

    JDBC-MySQL分页查询

    PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setInt(1, pageSize); // 每页记录数 pstmt.setInt(2, (currentPage - 1) * pageSize); // 偏移量 ResultSet rs = pstmt.executeQuery(); ``` ...

Global site tag (gtag.js) - Google Analytics