Populate the LruStatementCache with PreparedStatement objects returned from the Driver, instead of with their BTM proxies. Otherwise the LruEvictionListener will be handed a proxy to close when a statement is evicted from the cache; This proxy will merely pretend to close the statement, and then leak the underlying statement delegate. Also, putting proxies in the cache means that PreparedStatement.isClosed() will be true for every reused object.