tomcat设置连接池

一、tomcat设置连接池

Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(“java:comp/env/jdbc/bookstore”);
conn = ds.getConnection();
使用连接池,查询数据的方式。

servlet

package servletjdbc;

import javax.servlet.*;
import java.io.*;
import javax.servlet.http.*;
import java.sql.*;
import java.util.ArrayList;
import javax.sql.*;
import javax.naming.*;

public class GetDBInfoServlet2 extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            Context ctx = new InitialContext();
            DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/bookstore");
            conn = ds.getConnection();

            resp.setContentType("text/html;charset=utf-8");
            PrintWriter out = resp.getWriter();
            out.println("<html><head>");
            out.println("<title>数据库表的信息</title>");
            out.println("</head><body>");

            String tableName = req.getParameter("tableName");
            if (null == tableName || tableName.equals("")) {
                DatabaseMetaData dbMeta = conn.getMetaData();
                rs = dbMeta.getTables(null, null, null, new String[]{"TABLE"});
                out.println("<form action=\"getdbinfo\" method=\"get\">");
                out.println("<select size=1 name=tableName>");
                while (rs.next()) {
                    out.println("<option value=" + rs.getString("TABLE_NAME") + ">");
                    out.println(rs.getString("TABLE_NAME"));
                    out.println("</option>");
                }
                out.println("</select><p>");
                out.println("<input type=\"submit\" value=\"提交\">");
                out.println("</form>");
            } else {
                stmt = conn.createStatement();
                rs = stmt.executeQuery("select * from " + tableName);
                ResultSetMetaData rsMeta = rs.getMetaData();
                int columnCount = rsMeta.getColumnCount();
                out.println("<table border=1>");
                out.println("<caption>表的结构</catption>");
                out.println("<tr><th>字段名</th><th>字段类型</th><th>最大字符宽度</th></tr>");

                ArrayList<String> al = new ArrayList<String>();
                for (int i = 1; i <= columnCount; i++) {
                    out.println("<tr>");
                    String columnName = rsMeta.getColumnName(i);
                    out.println("<td>" + columnName + "</td>");
                    al.add(columnName);
                    out.println("<td>" + rsMeta.getColumnTypeName(i) + "</td>");
                    out.println("<td>" + rsMeta.getColumnDisplaySize(i) + "</td>");
                }
                out.println("</table><p>");

                out.println("<table border=1>");
                out.println("<caption>表中的数据</catption>");
                out.println("<tr>");

                for (int i = 0; i < columnCount; i++) {
                    out.println("<th>" + al.get(i) + "</th>");
                }

                while (rs.next()) {
                    out.println("<tr>");
                    for (int i = 1; i <= columnCount; i++) {
                        out.println("<td>" + rs.getString(i) + "</td>");
                    }
                    out.println("</tr>");
                }
                out.println("</table>");
            }
            out.println("</body><html>");
            out.close();
        } catch (NamingException ne) {
            ne.printStackTrace();
        } catch (SQLException se) {
            se.printStackTrace();
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException se) {
                    se.printStackTrace();
                }
                rs = null;
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException se) {
                    se.printStackTrace();
                }
                stmt = null;
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException se) {
                    se.printStackTrace();
                }
                conn = null;
            }
        }
    }
}

web.xml

    <servlet>
        <servlet-name>GetDBInfoServlet2</servlet-name>
        <servlet-class>servletjdbc.GetDBInfoServlet2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>GetDBInfoServlet2</servlet-name>
        <url-pattern>/getdbinfo2</url-pattern>
    </servlet-mapping>

tomcat的context.xml

  <!--配置mysql数据库的连接池, 
        需要做的额外步骤是将mysql的Java驱动类放到tomcat的lib目录下        
        maxIdle 连接池中最多可空闲maxIdle个连接 
        minIdle 连接池中最少空闲maxIdle个连接 
        initialSize 初始化连接数目 
        maxWait 连接池中连接用完时,新的请求等待时间,毫秒 
        username 数据库用户名
        password 数据库密码
        -->
    <Resource name="jdbc/bookstore" 
        auth="Container" 
        type="javax.sql.DataSource" 
        username="root" 
        password="root" 
        maxIdle="30" 
        maxWait="10000" 
        maxActive="100"
        driverClassName="com.mysql.cj.jdbc.Driver"
        url="jdbc:mysql://localhost:3306/bookstore?serverTimezone=UTC&amp;useSSL=false" />
二、小记

不积跬步,无以至千里;不积小流,无以成江海。频繁创建关闭链接消耗时间,线程池创建一定数量的链接,用完不立即销毁,设置一定的数值用来复用,提高效率。

三、引用、参考

[1]https://www.cnblogs.com/jay36/p/7684000.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值