在我的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个最大连接。
那么......我做错了什么?)