@Override
  public int doEndTag() throws JspException {
    if (query == null && bodyContent != null) {
      query = bodyContent.getString();
    }
    if (query == null || "".equals(query)) {
      throw new JspException("Query must be provided, as an attribute or as BodyContent.");
    }

    final JspWriter out = pageContext.getOut();
    Connection conn = null;
    Statement statement = null;
    JspException exceptionToThrow = null;
    try {
      conn = getConnection();
      statement = conn.createStatement();
      resultSet = statement.executeQuery(query);
      SQLUtils.resultSetToHTML(resultSet, new PrintWriter(out), style1, style1, style2, pkey, link);

    } catch (SQLException e) {
      exceptionToThrow = new JspException("Database error", e);
    } finally {
      SQLUtils.cleanup(resultSet, statement, conn);
      if (exceptionToThrow != null) {
        throw exceptionToThrow;
      }
    }
    resetFields();
    return EVAL_PAGE;
  }
  public static void main(String[] av) throws Throwable {
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
    try {

      System.out.println("Getting Connection");
      conn = ConnectionUtil.getConnection("ecom");

      // Turn off auto-commit
      conn.setAutoCommit(false);

      // Any warnings generated by the connect?
      checkForWarning(conn.getWarnings());

      System.out.println("Creating Statement");
      stmt = conn.createStatement();

      System.out.println("Creating table");
      stmt.executeUpdate("create table test (id int, name varchar)");

      System.out.println("Executing Insert");
      stmt.executeUpdate("insert into test values(42, 'ian');");

      System.out.println("Sleeping...");
      Thread.sleep(60 * 1000);

      System.out.println("** Committing **");
      conn.commit();

      System.out.println("Re-reading table");
      rs = stmt.executeQuery("select * from test");
      int i = 0;
      while (rs.next()) {

        System.out.println("Retrieving ID");
        int x = rs.getInt(1);
        System.out.println("Retrieving Name");
        String s = rs.getString(2);

        System.out.println("ROW " + ++i + ": " + x + "; " + s + "; " + ".");
      }

      System.out.println("Removing table");
      stmt.executeUpdate("drop table test");
    } finally {
      SQLUtils.cleanup(rs, stmt, conn);
    }
  }