Hi,
I was just wondering if i gane much when i also pool all my
PreparedStatements.
Now i get a connections of the pool in a method.
In that method i created a PreparedStatement.
set some values in it
and execute it.
Sometimes that preparedstatement is reused because it is in a lus.
But now everytime i come in that method a new PreparedStatement is created.
So why not pool them in the GenericConnection?
The prepareStatement method:
public PreparedStatement prepareStatement(String sql) throws SQLException {
if (closed) throw new SQLException(SQLEXCEPTION_CLOSED);
return (conn.prepareStatement(sql));
}
change to this:
public PreparedStatement prepareStatement(String sql) throws SQLException {
if (closed) throw new SQLException(SQLEXCEPTION_CLOSED);
PreparedStatement statement = null;
synchronize(_hmStatements)
{
statement = _hmStatemen.remove(sql);
}
if(statement == null)
{
statement = new
PooledPreparedStatement(this,conn.prepareStatement(sql));
}
return statement;
}
and the close of the PooledPreparedStatement class add's that statement to
the pool.
The problem is that a PreparedStatement is attached to one Connection.
So when i have 4 connections for pooling then i get 4 the same prepared
statements
for every connection 1.
And if you use a lot of kind's of PreparedStatements over time. A lot of
statements
are open. Does the database mind?
If this is not the right approace,
How else should PreparedStatements be pooled?
Johan Compagner