public void addBatch(String p0) throws java.sql.SQLException {
    statementQuery = p0;
    long startTime = System.currentTimeMillis();

    if (P6OutageOptions.getOutageDetection()) {
      P6OutageDetector.getInstance().registerInvocation(this, startTime, "batch", "", p0);
    }

    try {
      passthru.addBatch(p0);
    } finally {
      if (P6OutageOptions.getOutageDetection()) {
        P6OutageDetector.getInstance().unregisterInvocation(this);
      }
    }
  }
  public int[] executeBatch() throws java.sql.SQLException {
    long startTime = System.currentTimeMillis();

    if (P6OutageOptions.getOutageDetection()) {
      P6OutageDetector.getInstance()
          .registerInvocation(this, startTime, "statement", preparedQuery, statementQuery);
    }

    try {
      return (passthru.executeBatch());
    } finally {
      if (P6OutageOptions.getOutageDetection()) {
        P6OutageDetector.getInstance().unregisterInvocation(this);
      }
    }
  }
  // Since JDK 1.4
  public int executeUpdate(String p0, String p1[]) throws java.sql.SQLException {
    statementQuery = p0;
    long startTime = System.currentTimeMillis();

    if (P6OutageOptions.getOutageDetection()) {
      P6OutageDetector.getInstance().registerInvocation(this, startTime, "statement", "", p0);
    }

    try {
      return (passthru.executeUpdate(p0, p1));
    } finally {
      if (P6OutageOptions.getOutageDetection()) {
        P6OutageDetector.getInstance().unregisterInvocation(this);
      }
    }
  }
  public ResultSet executeQuery(String p0) throws java.sql.SQLException {
    statementQuery = p0;
    long startTime = System.currentTimeMillis();

    if (P6OutageOptions.getOutageDetection()) {
      P6OutageDetector.getInstance().registerInvocation(this, startTime, "statement", "", p0);
    }

    try {
      return (new P6ResultSet(getP6Factory(), passthru.executeQuery(p0), this, "", p0));
    } finally {
      if (P6OutageOptions.getOutageDetection()) {
        P6OutageDetector.getInstance().unregisterInvocation(this);
      }
    }
  }
  public int executeUpdate() throws SQLException {
    long startTime = System.currentTimeMillis();

    if (P6OutageOptions.getOutageDetection()) {
      P6OutageDetector.getInstance()
          .registerInvocation(
              this, startTime, "statement", preparedQuery, getQueryFromPreparedStatement());
    }

    try {
      return prepStmtPassthru.executeUpdate();
    } finally {
      if (P6OutageOptions.getOutageDetection()) {
        P6OutageDetector.getInstance().unregisterInvocation(this);
      }
    }
  }
  public ResultSet executeQuery() throws SQLException {
    long startTime = System.currentTimeMillis();

    if (P6OutageOptions.getOutageDetection()) {
      P6OutageDetector.getInstance()
          .registerInvocation(
              this, startTime, "statement", preparedQuery, getQueryFromPreparedStatement());
    }

    try {
      ResultSet resultSet = prepStmtPassthru.executeQuery();
      return (new P6ResultSet(
          getP6Factory(), resultSet, this, preparedQuery, getQueryFromPreparedStatement()));
    } finally {
      if (P6OutageOptions.getOutageDetection()) {
        P6OutageDetector.getInstance().unregisterInvocation(this);
      }
    }
  }
  @Override
  public Object invoke(
      final Object proxy, final Object underlying, final Method method, final Object[] args)
      throws Throwable {
    long startTime = System.currentTimeMillis();

    if (P6OutageOptions.getActiveInstance().getOutageDetection()) {
      P6OutageDetector.getInstance()
          .registerInvocation(
              this,
              startTime,
              "statement",
              preparedStatementInformation.getStatementQuery(),
              preparedStatementInformation.getSqlWithValues());
    }

    try {
      return method.invoke(underlying, args);
    } finally {
      if (P6OutageOptions.getActiveInstance().getOutageDetection()) {
        P6OutageDetector.getInstance().unregisterInvocation(this);
      }
    }
  }