code: @Override
      public int doEndTag() throws JspException {
  	/*
  	 * Use the SQL statement specified by the sql attribute, if any,
  	 * otherwise use the body as the statement.
  	 */
  	String sqlStatement = null;
  	if (sql != null) {
  	    sqlStatement = sql;
          } else if (bodyContent != null) {
  	    sqlStatement = bodyContent.getString();
  	}
  	if (sqlStatement == null || sqlStatement.trim().length() == 0) {
  	    throw new JspTagException(
                  Resources.getMessage("SQL_NO_STATEMENT"));
  	}
  
  	int result = 0;
          PreparedStatement ps = null;
  	try {
              ps = conn.prepareStatement(sqlStatement);
  	    setParameters(ps, parameters);
  	    result = ps.executeUpdate();
  	}
  	catch (Throwable e) {
  	    throw new JspException(sqlStatement + ": " + e.getMessage(), e);
          } finally {
              if (ps != null) {
                  try {
                      ps.close();
                  } catch (SQLException sqe) {
                      throw new JspException(sqe.getMessage(), sqe);
                  }
              }
          }
          if (var != null) {
              pageContext.setAttribute(var, new Integer(result), scope);
  	}
  	return EVAL_PAGE;
      }
docs: <p>Execute the SQL statement, set either through the <code>sql</code>
  attribute or as the body, and save the result as a variable
  named by the <code>var</code> attribute in the scope specified
  by the <code>scope</code> attribute, as an object that implements
  the Result interface.
  <p>The connection used to execute the statement comes either
  from the <code>DataSource</code> specified by the
  <code>dataSource</code> attribute, provided by a parent action
  element, or is retrieved from a JSP scope  attribute
  named <code>javax.servlet.jsp.jstl.sql.dataSource</code>.