Applications can interact with a database using a JDBC subsystem. The JDBC subsystem includes a connection pool with multiple connections, and parses database requests to produce statements to be sent to a database management system (DBMS). A previously parsed statement can be stored in a prepared statement cache. A profiling component can be used to maintain profile information concerning the connection pool and the prepared statement cache.