我是否应该在每次查询或插入后关闭数据库连接?

问题描述 投票:0回答:0

我目前正在使用 tomcat 9.0 在 java web 中学习 JSP 和 Servlet,

  • 我看到一些网站说一个servlet只会被初始化一次,当服务器要终止那个servlet的生命时会调用

    destroy()
    方法,

  • 一个servlet将用于多个相同类型的请求,例如http请求,

  • 和数据库连接资源很重要

所以,我认为,我应该使

Connection object
成为我的Servlet的成员,这样我就不需要在每次有新的http请求时都建立一个新的连接,并且在有新的http请求时关闭连接servlet 被销毁.

像这样:

public class LoginServlet extends HttpServlet {
    private Connection conn;

    // init, get mysql Connection
    public TeamBlueServlet() {
        initiate();
    }

    private void initiate() {
        // do something and get connection...
        this.conn = controller.getConnection();
       
    }

    // close connection in this method
    @Override
    public void destroy() {
         // try, catch
         this.conn.close();
    }

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // do some query
        try {
            ResultSet resultSet = ...;
            PreparedStatement statement = ...;
        } catch (SQLException e) {
            ...
        } finally {
            close(statement, resultSet);
        }
    }

    private void close(PreparedStatement sta, ResultSet rs) {
        try {
            if(sta !=null) sta.close();
        } catch (SQLException e) {
            logger.error(e.getMessage());
        }

        try {
            if(rs !=null) rs.close();
        } catch (SQLException e) {
            logger.error(e.getMessage());
        }
    }
}

但我也看到一些说我们应该,尽可能晚地打开连接并尽快关闭连接。

因此我感到困惑,我想知道我是否需要建立连接并在每次查询时关闭它,还是应该保持连接打开?我知道有一个叫做连接池的东西可能可以解决这个问题,但我想知道在这种情况下,哪个会更好。

任何帮助将不胜感激,谢谢。

java database servlets jdbc
© www.soinside.com 2019 - 2024. All rights reserved.