JDBC 数据库连接池
发布日期:2021-05-27 02:54:48 浏览次数:28 分类:技术文章

本文共 2760 字,大约阅读时间需要 9 分钟。

当对数据库的访问不是很频繁时,可以在每次访问数据库时建立一个连接,用完之后关闭。但是,对于一个复杂的数据库应用,频繁的建立、关闭连接,会极大的减低系统性能,造成瓶颈。所以可以使用数据库连接池来达到连接资源的共享,使得对于数据库的连接可以使高效、安全的复用。

在开发具体项目时没有必要自己编写数据库连接池,现在已经有很多现成的组件。许多服务器已经内置了数据库连接池,如Tomcat服务器、Jboss服务器和WebLogic服务器等。我自己根据书上的例子,配置了一下Tomcat服务器。配置步骤如下:

(1)配置Tomcat根目录下的 \conf 中的文件 context.xml 如下:

<!--Resource 设置数据库连接池的核心-->

    <!--属性 name 数据源的名字       属性 auth 表示验证方式     type 资源的类型       -->
    <Resource name="jdbc/DBWater" auth="Container" Type="javax.sql.DataSource"
              maxActive="100" maxIdle="30" maxWait="10000"
              username="root" password="*******"
              driverClassName="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/student"/>

将这段代码添加到<context></context>之间

(2)修改项目工程目录下 WebRoot/WEB-INF/web.xml 文件:

<resource-ref>

  <!-- 描述信息 -->
  <description>Connection Pool</description>
  <!-- 数据源名字 和上面配置中数据源的名字一致-->
  <res-ref-name>jdbc/DBWater</res-ref-name>
  <!-- 数据源类型 -->
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
  <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

下面就可以进行连接池使用了。比如,这里,创建一个DBWater.java文件:

DBWater.java

package com.lihui.dbwater;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class DBWater {
    String userId;
    String name;
    String password;
    
    public String getUserId(){
        return userId;
    }
    
    public String getName(){
        return name;
    }
    
    public String getpassword(){
        return password;
    }
    
    public void init(){
        try {
            InitialContext initC = new InitialContext();//创建InitialContext对象
            if (initC == null) {
                throw new Exception("No Context");
            }
            Context context = (Context)initC.lookup("java:comp/env");//不变
            DataSource ds = (DataSource)context.lookup("jdbc/DBWater");//tomcat服务器配置文件中数据源名称
            if (ds != null) {
                Connection conn = ds.getConnection();
                if (conn != null) {
                    Statement statement = conn.createStatement();
                    ResultSet resultSet = statement.executeQuery("select * from user");
                    while (resultSet.next()) {
                        userId = resultSet.getString(1);
                        name = resultSet.getString(2);
                        password = resultSet.getString(3);
                    }
                    conn.close();
                }
            }
        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

那么在jsp文件中调用该类:

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>

<%@page import="com.lihui.dbwater.DBWater"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>连接池测试</title>
  </head>
  
  <body>
  <%
      DBWater rs = new DBWater();
      rs.init();
%>
  id:<%=rs.getUserId() %>
  name:<%=rs.getName() %>
  psd:<%=rs.getpassword() %>
  </body>
</html>

参考文献:

1http://f543711700.iteye.com/blog/1173618

2http://www.cnblogs.com/lihuiyy/archive/2012/02/14/2351768.html

转载地址:https://blog.csdn.net/leijie0322/article/details/46669593 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:The import javax.servlet cannot be resolved
下一篇:Ubuntu下mysql安装及常用命令

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年07月07日 07时47分03秒