Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
   *
   * The contents of this file are subject to the terms of either the GNU
   * General Public License Version 2 only ("GPL") or the Common Development
   * and Distribution License("CDDL") (collectively, the "License").  You
   * may not use this file except in compliance with the License.  You can
  * obtain a copy of the License at
  * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
  * or packager/legal/LICENSE.txt.  See the License for the specific
  * language governing permissions and limitations under the License.
  *
  * When distributing the software, include this License Header Notice in each
  * file and include the License file at packager/legal/LICENSE.txt.
  *
  * GPL Classpath Exception:
  * Oracle designates this particular file as subject to the "Classpath"
  * exception as provided by Oracle in the GPL Version 2 section of the License
  * file that accompanied this code.
  *
  * Modifications:
  * If applicable, add the following below the License Header, with the fields
  * enclosed by brackets [] replaced by your own identifying information:
  * "Portions Copyright [year] [name of copyright owner]"
  *
  * Contributor(s):
  * If you wish your version of this file to be governed by only the CDDL or
  * only the GPL Version 2, indicate your decision by adding "[Contributor]
  * elects to include this software in this distribution under the [CDDL or GPL
  * Version 2] license."  If you don't indicate a single choice of license, a
  * recipient has the option to distribute your version of this file under
  * either the CDDL, the GPL Version 2 or to extend the choice of license to
  * its licensees as provided above.  However, if you add GPL Version 2 code
  * and therefore, elected the GPL Version 2 license, then the option applies
  * only if the new code is made subject to such option by the copyright
  * holder.
  *
  *
  * This file incorporates work covered by the following copyright and
  * permission notice:
  *
  * Copyright 2004 The Apache Software Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package org.apache.taglibs.standard.tag.common.sql;
 
 import java.util.List;
 
 

Tag handler for <Query> in JSTL.

Author(s):
Hans Bergsten
Justyna Horwat
 
 
 public abstract class QueryTagSupport extends BodyTagSupport 
     implements TryCatchFinallySQLExecutionTag {
 
     private String var;
     private int scope;
 
     /*
      * The following properties take expression values, so the
      * setter methods are implemented by the expression type
      * specific subclasses.
      */
    protected Object rawDataSource;
    protected boolean dataSourceSpecified;
    protected String sql;
    protected int maxRows;
    protected boolean maxRowsSpecified;
    protected int startRow;
    /*
     * Instance variables that are not for attributes
     */
    private Connection conn;
    private List parameters;
    private boolean isPartOfTransaction;
    //*********************************************************************
    // Constructor and initialization
    public QueryTagSupport() {
        super();
        init();
    }
    private void init() {
         = 0;
         = -1;
	 = null;
	 = null;
	 = null;
	 = null;
	 = null;
         = .;
    }
    //*********************************************************************
    // Accessor methods

    
Setter method for the name of the variable to hold the result.
    public void setVar(String var) {
	this. = var;
    }

    
Setter method for the scope of the variable to hold the result.
    public void setScope(String scopeName) {
         = Util.getScope(scopeName);
    }
    //*********************************************************************
    // Public utility methods

    
Called by nested parameter elements to add PreparedStatement parameter values.
    public void addSQLParameter(Object o) {
	if ( == null) {
	     = new ArrayList();
	}
    }
    //*********************************************************************
    // Tag logic

    
Prepares for execution by setting the initial state, such as getting the Connection
    public int doStartTag() throws JspException {
        if (!) {
	    Object obj = Config.find(.);
	    if (obj != null) {
		if (obj instanceof Integer) {
		     = ((Integerobj).intValue();
else if (obj instanceof String) {
		    try {
			 = Integer.parseInt((Stringobj);
		    } catch (NumberFormatException nfe) {
			throw new JspException(
			    Resources.getMessage("SQL_MAXROWS_PARSE_ERROR",
						 (Stringobj),
			    nfe);
		    }
else {
		    throw new JspException(
                        Resources.getMessage("SQL_MAXROWS_INVALID"));
		}
            }
        }
	try {
	     = getConnection();
catch (SQLException e) {
	    throw new JspException( + ": " + e.getMessage(), e);
	}
    }

    

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.

    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 ( != null) {
	    sqlStatement = ;
	}
	else if ( != null) {
	    sqlStatement = .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 (( < 0) || ( < -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 = .prepareStatement(sqlStatement);
	    ResultSet rs = ps.executeQuery();
	    result = new ResultImpl(rs);
            ps.close();
	}
	catch (Throwable e) {
	    throw new JspException(sqlStatement + ": " + e.getMessage(), e);
	}
	return ;
    }

    
Just rethrows the Throwable.
    public void doCatch(Throwable tthrows Throwable {
	throw t;
    }

    
Close the Connection, unless this action is used as part of a transaction.
    public void doFinally() {
	if ( != null && !) {
	    try {
	    } catch (SQLException e) {} // Not much we can do
	}
	 = null;
	 = null;
    }
    //*********************************************************************
    // Private utility methods
    private Connection getConnection() throws JspExceptionSQLException {
	// Fix: Add all other mechanisms
	Connection conn = null;
	if (parent != null) {
            if () {
                throw new JspTagException(
                    Resources.getMessage("ERROR_NESTED_DATASOURCE"));
            }
	    conn = parent.getSharedConnection();
             = true;
else {
	    if (( == null) && ) {
		throw new JspException(
		    Resources.getMessage("SQL_DATASOURCE_NULL"));
	    }
	    DataSource dataSource = DataSourceUtil.getDataSource(,
            try {
	        conn = dataSource.getConnection();
            } catch (Exception ex) {
                throw new JspException(
                    Resources.getMessage("DATASOURCE_INVALID"
                                         ex.toString()));
            }
	}
	return conn;
    }
    private void setParameters(PreparedStatement psList parameters
        throws SQLException
    {
	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));
	    }
	}
    }
New to GrepCode? Check out our FAQ X