本文将详细讲解Java如何使用MySQL实现连接池。
什么是连接池?
对于Java Web应用或其他需要访问数据库的应用而言,每次需要访问数据库时都会不断地建立和销毁连接,这样既费时,也会使得数据库资源消耗。连接池是一种优雅的解决方案,它可以在应用启动时创建连接池,从而使得应用只在启动和关闭时创建和销毁连接,以达到减少连接创建和销毁的消耗的效果。
如何实现连接池?
步骤1:创建数据库连接池
我们可以使用Apache Commons DBCP连接池库来构建数据库连接池,可以通过以下步骤创建连接池:
- 引入DBCP库:
xml
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
- 创建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技术站