Methods Summary |
---|
public void | addSQLParameter(java.lang.Object o)Called by nested parameter elements to add PreparedStatement
parameter values.
if (parameters == null) {
parameters = new ArrayList();
}
parameters.add(o);
|
public void | doCatch(java.lang.Throwable t)Just rethrows the Throwable.
throw t;
|
public int | doEndTag()Execute the SQL statement, set either through the sql
attribute or as the body, and save the result as a variable
named by the var attribute in the scope specified
by the scope attribute, as an object that implements
the Result interface.
The connection used to execute the statement comes either
from the DataSource specified by the
dataSource attribute, provided by a parent action
element, or is retrieved from a JSP scope attribute
named javax.servlet.jstl.sql.dataSource .
/*
* 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"));
}
/*
* We shouldn't have a negative startRow or illegal maxrows
*/
if ((startRow < 0) || (maxRows < -1)) {
throw new JspException(
Resources.getMessage("PARAM_BAD_VALUE"));
}
Result result = null;
/*
* Note! We must not use the setMaxRows() method on the
* the statement to limit the number of rows, since the
* Result factory must be able to figure out the correct
* value for isLimitedByMaxRows(); there's no way to check
* if it was from the ResultSet.
*/
try {
PreparedStatement ps = conn.prepareStatement(sqlStatement);
setParameters(ps, parameters);
ResultSet rs = ps.executeQuery();
result = new ResultImpl(rs, startRow, maxRows);
ps.close();
}
catch (Throwable e) {
throw new JspException(sqlStatement + ": " + e.getMessage(), e);
}
pageContext.setAttribute(var, result, scope);
return EVAL_PAGE;
|
public void | doFinally()Close the Connection , unless this action is used
as part of a transaction.
if (conn != null && !isPartOfTransaction) {
try {
conn.close();
} catch (SQLException e) {} // Not much we can do
}
conn = null;
parameters = null;
|
public int | doStartTag()Prepares for execution by setting the initial state, such as
getting the Connection
if (!maxRowsSpecified) {
Object obj = Config.find(pageContext, Config.SQL_MAX_ROWS);
if (obj != null) {
if (obj instanceof Integer) {
maxRows = ((Integer) obj).intValue();
} else if (obj instanceof String) {
try {
maxRows = Integer.parseInt((String) obj);
} catch (NumberFormatException nfe) {
throw new JspException(
Resources.getMessage("SQL_MAXROWS_PARSE_ERROR",
(String) obj),
nfe);
}
} else {
throw new JspException(
Resources.getMessage("SQL_MAXROWS_INVALID"));
}
}
}
try {
conn = getConnection();
} catch (SQLException e) {
throw new JspException(sql + ": " + e.getMessage(), e);
}
return EVAL_BODY_BUFFERED;
|
private java.sql.Connection | getConnection()
// Fix: Add all other mechanisms
Connection conn = null;
isPartOfTransaction = false;
TransactionTagSupport parent = (TransactionTagSupport)
findAncestorWithClass(this, TransactionTagSupport.class);
if (parent != null) {
if (dataSourceSpecified) {
throw new JspTagException(
Resources.getMessage("ERROR_NESTED_DATASOURCE"));
}
conn = parent.getSharedConnection();
isPartOfTransaction = true;
} else {
if ((rawDataSource == null) && dataSourceSpecified) {
throw new JspException(
Resources.getMessage("SQL_DATASOURCE_NULL"));
}
DataSource dataSource = DataSourceUtil.getDataSource(rawDataSource,
pageContext);
try {
conn = dataSource.getConnection();
} catch (Exception ex) {
throw new JspException(
Resources.getMessage("DATASOURCE_INVALID",
ex.toString()));
}
}
return conn;
|
private void | init()
startRow = 0;
maxRows = -1;
maxRowsSpecified = dataSourceSpecified = false;
isPartOfTransaction = false;
conn = null;
rawDataSource = null;
parameters = null;
sql = null;
var = null;
scope = PageContext.PAGE_SCOPE;
|
private void | setParameters(java.sql.PreparedStatement ps, java.util.List parameters)
if (parameters != null) {
for (int i = 0; i < parameters.size(); i++) {
/* The first parameter has index 1. If a null
* is passed to setObject the parameter will be
* set to JDBC null so an explicit call to
* ps.setNull is not required.
*/
ps.setObject(i + 1, parameters.get(i));
}
}
|
public void | setScope(java.lang.String scopeName)Setter method for the scope of the variable to hold the
result.
scope = Util.getScope(scopeName);
|
public void | setVar(java.lang.String var)Setter method for the name of the variable to hold the
result.
this.var = var;
|