有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

servlet线程的java数据库连接?

关于默认情况下多线程的servlet,每个servlet是实例化数据库连接还是该servlet的所有线程之间共享连接

我使用JDBC作为servlet和Oracle数据库之间的接口

如果数据库连接在所有线程之间共享,这是否意味着我应该使用数据库连接池

/** Open the connection here **/
public void init() {
    String url = "server";
    String username = "pwd";
    String password = "usr";
    try {
        Class.forName("oracle.jdbc.OracleDriver");
        conn = DriverManager.getConnection(url, username, password);
    } catch (Exception e) {
        System.err.println("Error making pool: " + e);
        conn = null;
    }
}

共 (2) 个答案

  1. # 1 楼答案

    If a database connection is shared between all threads , does this mean I should use connection pooling to the database?

    是的,当然!JDBC连接和单线程,而不是线程安全的。只需在两者之间引入连接池,首先获取连接,并在同一请求期间尽快关闭它

  2. # 2 楼答案

    根据您编写连接的方式,它可以是每个servlet(实例变量)或全局(静态变量——前提是您不在集群环境中,并且管理并发,这将是一个严重的瓶颈)

    然而,如果你想让你的系统高效、可靠、可扩展、更容易维护,并且不需要实现更高级的功能,比如在发生链接故障时重新连接(考虑到你的后端是Oracle,我认为情况就是这样),你应该研究你的应用服务器连接池机制