Web应用程序中的JDBC连接池问题

时间:2015-03-04 06:30:16

标签: java jdbc

我遇到连接池问题。使用tomcat8,primefaces 5.1和Eclipse。当我用单个用户测试我的代码时,它工作正常但是当我使用2个用户时,当user1正在进行时访问user2时,user1被卡住并且user2开始处理。当user2完成处理时,两个用户同时出来并且user1没有显示任何输出(user2正在获取部分数据)并且两个用户都得到了耗尽的结果集错误。这是我的连接池代码。

public GetConnection(){
    try {
        Context initContext = new InitialContext();
        Context envContext = (Context) initContext.lookup("java:/comp/env");
        dataSource1 = (DataSource) envContext.lookup("jdbc/DB1");
        dataSource2 = (DataSource) envContext.lookup("jdbc/DB2");
        dataSource3 = (DataSource) envContext.lookup("jdbc/DB3");

    } catch (NamingException e) {
        e.printStackTrace();
    }
}

根据条件获得连接,

public Connection getConnections(int i) {

    try {
            if (i == 0) {
            connection = dataSource1.getConnection();
           } else if (i == 1) {
            connection = dataSource2.getConnection();
        } else {
            connection = dataSource3.getConnection();
       }
    } catch (SQLException ex) {
        addErrorMessage(ex.getMessage());
    }
    return connection;
}

我必须运行4个查询,为此我只创建一次连接和语句,但是有4个结果集,在finally块中关闭所有这些连接

 finally{
        if (rs != null) try { rs.close(); } catch (SQLException logOrIgnore) {}
         if (rs1 != null) try { rs1.close(); } catch (SQLException logOrIgnore) {}
         if (rs2 != null) try { rs2.close(); } catch (SQLException logOrIgnore) {}
         if (rs3 != null) try { rs3.close(); } catch (SQLException logOrIgnore) {}
         if (stmt != null) try { stmt.close(); } catch (SQLException logOrIgnore) {}
         if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}

    }

任何人都可以帮我解决这个问题吗?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我得到了这个问题的解决方案,我使用静态连接和其他变量删除解决了这个问题。感谢