1 /* 2 * Copyright 2002-2007 the original author or authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package org.springframework.jdbc.core; 18 19 import java.sql.ResultSet; 20 import java.sql.SQLException; 21 22 import org.springframework.dao.DataAccessException; 23 24 /** 25 * Callback interface used by {@link JdbcTemplate}'s query methods. 26 * Implementations of this interface perform the actual work of extracting 27 * results from a {@link java.sql.ResultSet}, but don't need to worry 28 * about exception handling. {@link java.sql.SQLException SQLExceptions} 29 * will be caught and handled by the calling JdbcTemplate. 30 * 31 * <p>This interface is mainly used within the JDBC framework itself. 32 * A {@link RowMapper} is usually a simpler choice for ResultSet processing, 33 * mapping one result object per row instead of one result object for 34 * the entire ResultSet. 35 * 36 * <p>Note: In contrast to a {@link RowCallbackHandler}, a ResultSetExtractor 37 * object is typically stateless and thus reusable, as long as it doesn't 38 * access stateful resources (such as output streams when streaming LOB 39 * contents) or keep result state within the object. 40 * 41 * @author Rod Johnson 42 * @author Juergen Hoeller 43 * @since April 24, 2003 44 * @see JdbcTemplate 45 * @see RowCallbackHandler 46 * @see RowMapper 47 * @see org.springframework.jdbc.core.support.AbstractLobStreamingResultSetExtractor 48 */ 49 public interface ResultSetExtractor { 50 51 /** 52 * Implementations must implement this method to process the entire ResultSet. 53 * @param rs ResultSet to extract data from. Implementations should 54 * not close this: it will be closed by the calling JdbcTemplate. 55 * @return an arbitrary result object, or <code>null</code> if none 56 * (the extractor will typically be stateful in the latter case). 57 * @throws SQLException if a SQLException is encountered getting column 58 * values or navigating (that is, there's no need to catch SQLException) 59 * @throws DataAccessException in case of custom exceptions 60 */ 61 Object extractData(ResultSet rs) throws SQLException, DataAccessException; 62 63 } 64