使用连接池或会话管理数据库连接。怎么样?

时间:2010-01-22 19:37:52

标签: database session servlets connection-pooling

我有一个简单的任务要完成,但我不确定什么是最好的方法。

每个用户都有自己的用户名和密码,可以连接到具有不同权限的数据库。一旦用户连接,他将根据他想要执行的操作进行多个查询。因此,我想保留与数据库的连接。所以这是我的问题?

通过连接池或会话或两者实现我想做的更好吗? 示例代码将不胜感激!!!非常感谢你。

2 个答案:

答案 0 :(得分:1)

使用服务器中的“root”权限定义一个池化DataSource的容器管理连接,并为每个用户使用DataSource#getConnection()方法,该方法将用户名和密码作为参数。

答案 1 :(得分:0)

我遇到了与Oracle数据库相同的问题,每个事务都必须记录下来以进行可能的审计。 因此,每次用户在Web应用程序中进行身份验证时,都会显示如下对象:

public class ConnectionUser implements Serializable {

private String userId;
private String password;
private String transactionKey;
//setters and getters

public boolean equals(Object object) {
    if(!(object instanceof org.ampf.af.jdbc.connection.ConnectionUser)) {
        return false;
    }
    if(object == null) {
        return false;
    }
    return (this.getUserId().equals(((ConnectionUser)object).getUserId()) && 
            this.getPassword().equals(((ConnectionUser)object).getPassword()));
}

然后我实现了一个连接池(基于Map),其中键是ConnectionUser对象,值是打开的连接。如果映射中不存在该键,则它会创建一个连接并将其分配到映射中。

我希望它可以帮到你。