如何在缓存系统间返回连接池的连接?

时间:2014-04-07 12:04:54

标签: java jdbc intersystems-cache

在我的java项目中,我使用Cache JDBC-driver进行数据库连接。 因此,要创建连接池,我使用:

public CacheConnectionPoolDataSource pds = null;
...
   public final void Connect() {
    try {
        pds = new CacheConnectionPoolDataSource();
        pds.restartConnectionPool();
        pds.setMaxPoolSize(7);
        pds.setURL("jdbc:Cache://" + host + ":" + port + "/" + namespase);
        pds.setUser(dblogin);
        pds.setPassword(dbpassword);
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    } 
}

要使用连接:

static public Connection GetConnection() {
    Connection cn = null;
    try {
        cn = pds.getConnection();
        cn.setAutoCommit(true);
    } catch (Exception e) {
        System.out.println(e.getMessage());
        if (cn == null) {
            try {
                GetInstance().Connect();
                cn = pds.getConnection();
                cn.setAutoCommit(true);
            } catch (SQLException e1) {
                System.out.println(e.getMessage());
            }
        }

    }
    return cn;
}

进行这样的查询后:

ResultSet result = Database.GetInstance().Query(query);

我使用" FreeResultSet(结果);":

static public void FreeResultSet(ResultSet resultSet) {
    Connection connection = null;
    Statement statement = null;

    try {
        if (resultSet != null) {
            statement = resultSet.getStatement();
        }
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }

    try {
        if (statement != null) {
            connection = statement.getConnection();
        }
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }

    try {
        if (resultSet != null) {
            resultSet.close();
        }
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }

    Database.FreeStatement(statement);
    Database.FreeConnection(connection);
}

static public void FreeConnection(Connection con) {
    try {
        if (con != null) {
            con.close();
        }
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }
}

static public void FreeStatement(Statement st) {
    try {
        if (st != null) {
            st.close();
        }
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    }
}

它工作得很好..但是当我同时使用许多查询时,会出现太多的连接(最多25个)(大于7我在&#34中声明; pds.setMaxPoolSize(7) );"),以及"用户许可证使用中的高速缓存控制面板"它增长到25,我的应用程序无法获得任何连接,因为1个Cache许可证只给我25个最大连接。

那么......我做错了什么?)

0 个答案:

没有答案