/**
  * Create or obtain a {@link PreparedStatement} from my pool.
  *
  * @return a {@link PoolablePreparedStatement}
  */
 public synchronized PreparedStatement prepareStatement(String sql) throws SQLException {
   try {
     return (PreparedStatement) (_pstmtPool.borrowObject(createKey(sql)));
   } catch (NoSuchElementException e) {
     throw new SQLNestedException("MaxOpenPreparedStatements limit reached", e);
   } catch (RuntimeException e) {
     throw e;
   } catch (Exception e) {
     throw new SQLNestedException("Borrow prepareStatement from pool failed", e);
   }
 }