Java使用MySQL实现连接池代码实例

本文将详细讲解Java如何使用MySQL实现连接池。

什么是连接池?

对于Java Web应用或其他需要访问数据库的应用而言,每次需要访问数据库时都会不断地建立和销毁连接,这样既费时,也会使得数据库资源消耗。连接池是一种优雅的解决方案,它可以在应用启动时创建连接池,从而使得应用只在启动和关闭时创建和销毁连接,以达到减少连接创建和销毁的消耗的效果。

如何实现连接池?

步骤1:创建数据库连接池

我们可以使用Apache Commons DBCP连接池库来构建数据库连接池,可以通过以下步骤创建连接池:

  1. 引入DBCP库:

xml
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>

  1. 创建BasicDataSource对象:

java
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUsername("root");
dataSource.setPassword("password");
dataSource.setInitialSize(10);
dataSource.setMaxActive(20);

在上面的代码中,我们设置了最初的连接池大小为10,最大活动连接数为20。

步骤2:从连接池中获取连接

我们可以使用以下代码从数据库连接池中获取连接:

Connection connection = dataSource.getConnection();

示例1:使用连接池与MySQL数据库通信

以下是示例代码:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.apache.commons.dbcp2.BasicDataSource;

public class Main {

  public static void main(String[] args) throws SQLException {

    // 创建数据库连接池
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/test");
    dataSource.setUsername("root");
    dataSource.setPassword("password");
    dataSource.setInitialSize(10);
    dataSource.setMaxActive(20);

    // 使用连接池获取连接
    Connection connection = dataSource.getConnection();
    Statement statement = connection.createStatement();

    // 执行查询,并输出结果
    ResultSet resultSet = statement.executeQuery("SELECT * FROM user;");
    while (resultSet.next()) {
      System.out.println("id: " + resultSet.getInt("id"));
      System.out.println("name: " + resultSet.getString("name"));
      System.out.println("age: " + resultSet.getInt("age"));
    }

    // 关闭连接
    resultSet.close();
    statement.close();
    connection.close();
  }
}

示例2:在Web应用中使用连接池与MySQL数据库通信

以下是Web应用中实现连接池的示例代码:

import java.sql.Connection;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.dbcp2.BasicDataSource;

public class ConnectionPoolServlet extends HttpServlet {

  private static final long serialVersionUID = 1L;

  // 声明一个数据库连接池对象
  private BasicDataSource dataSource;

  @Override
  public void init() throws ServletException {
    super.init();
    try {
      // 创建数据源
      dataSource = new BasicDataSource();
      dataSource.setDriverClassName("com.mysql.jdbc.Driver");
      dataSource.setUrl("jdbc:mysql://localhost:3306/test");
      dataSource.setUsername("root");
      dataSource.setPassword("password");
      dataSource.setInitialSize(10);
      dataSource.setMaxActive(20);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    try {
      // 从连接池中获取连接
      Connection connection = dataSource.getConnection();

      // 业务逻辑操作...
      // ...

      // 关闭连接
      connection.close();
    } catch (SQLException ex) {
      ex.printStackTrace();
    }
  }

  @Override
  public void destroy() {
    super.destroy();
    try {
      // 关闭连接池
      if (dataSource != null) {
        dataSource.close();
      }
    } catch (SQLException ex) {
      ex.printStackTrace();
    }
  }
}

在上面的示例中,我们在servlet的init()方法中创建了一个数据库连接池对象,并在doPost()方法中从连接池中获取连接,执行业务逻辑操作,最后在finally块中关闭连接。在servlet的destroy()方法中,在应用关闭时关闭数据库连接池。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java使用MySQL实现连接池代码实例 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • SpringBoot整个启动过程的分析

    Spring Boot整个启动过程的分析 Spring Boot是一个非常流行的Java框架,它提供了许多自动配置功能,使得开发人员可以更快速地构建应用程序。在本文中,我们将深入探讨Spring Boot整个启动过程的分析。 Spring Boot整个启动过程的分析 Spring Boot的整个启动过程可以分为以下几个步骤: 加载Spring Boot应用程…

    Java 2023年5月15日
    00
  • Mybatis全面分页插件

    下面是关于”Mybatis全面分页插件”的完整攻略: 一、什么是Mybatis全面分页插件? Mybatis全面分页插件是Mybatis框架的一个开源插件,它可以帮助我们在进行分页操作时更便捷地进行关联查询和聚合函数查询。相比于Mybatis自带的分页插件,它的优点在于可以使用XML或注解方式进行配置,并且配置简单、易于使用。 二、如何使用Mybatis全面…

    Java 2023年6月1日
    00
  • Java的Struts框架报错“NullModuleException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“NullModuleException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置,则可能会出现此错误。在这种情况下,需要检查文件以解决此问题。 模块名称:如果模块名称不正确,则可能出现此错误。在这种情况下,需要检查模块名称以解决此问题。 以下是两个实例: 例 1 如果配置文件中…

    Java 2023年5月5日
    00
  • 详解Java的Spring框架中bean的注入集合

    关于“详解Java的Spring框架中bean的注入集合”的攻略,我将会分为以下几个步骤来进行讲解: 什么是Spring框架中的bean? Spring中bean的注入集合方式有哪些? 集合注入的使用示例。 下面我们将进入详细讲解的部分: 1. 什么是Spring框架中的bean? Spring框架是目前广泛使用的Java企业应用开发框架,其中的bean指S…

    Java 2023年5月19日
    00
  • Java多线程之悲观锁与乐观锁

    Java多线程之悲观锁与乐观锁攻略 概述 在多线程编程中,为了保证数据的安全,我们需要使用锁机制来控制对共享资源的访问。其中,悲观锁是一种传统的锁模式,它认为在每次访问共享资源时都有可能发生冲突,所以对共享资源进行加锁以防止其他线程的访问。而乐观锁则是一种更为轻量级的锁模式,它的思想是假设多线程之间没有冲突,当发生冲突时再进行处理。 本文将详细介绍悲观锁和乐…

    Java 2023年5月18日
    00
  • Hibernate命名策略详解

    Hibernate命名策略详解 Hibernate是一个Java持久化框架,可以将Java对象和关系型数据库中的数据进行映射。在使用Hibernate时,我们可以使用不同的命名策略来生成数据库表格名、列名、主键名等信息。本文将详细讲解Hibernate的命名策略,帮助读者了解不同的命名策略,并选择适合自己的命名策略。 命名策略分类 在Hibernate中,主…

    Java 2023年5月19日
    00
  • Struts2实现文件上传功能实例解析

    让我给你详细讲解一下“Struts2实现文件上传功能实例解析”的完整攻略。 1. 导入相关依赖 首先,我们需要在项目的pom.xml文件中导入相关依赖: <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileuplo…

    Java 2023年5月20日
    00
  • Java基础之常用的命令行指令

    Java基础之常用的命令行指令 在使用Java开发中,经常需要在命令行中执行一些操作,例如编译、运行Java程序等。下面是常用的命令行指令及其作用。 javac javac是Java编译器,可以将Java源代码编译成Java字节码文件(.class文件)。使用方法如下: javac HelloWorld.java 上述指令将会编译HelloWorld.jav…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部