docs: protected Connection createConnection() throws SQLException {
          if ((cacheStatements || cacheConnection) && useConnection != null) {
              return useConnection;
          }
          if (dataSource != null) {
              // Use a doPrivileged here as many different properties need to be
              // read, and the policy shouldn't have to list them all.
              Connection con;
              try {
                  con = AccessController.doPrivileged(new PrivilegedExceptionAction<Connection>() {
                      public Connection run() throws SQLException {
                          return dataSource.getConnection();
                      }
                  });
              } catch (PrivilegedActionException pae) {
                  Exception e = pae.getException();
                  if (e instanceof SQLException) {
                      throw (SQLException) e;
                  } else {
                      throw (RuntimeException) e;
                  }
              }
              if (cacheStatements || cacheConnection) {
                  useConnection = con;
              }
              return con;
          }
          return useConnection;
      }