提交 53692a79 编写于 作者: J Juergen Hoeller

polishing

上级 b07a7be2
......@@ -24,6 +24,7 @@ import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
......@@ -32,33 +33,34 @@ import org.springframework.jdbc.InvalidResultSetAccessException;
/**
* Default implementation of Spring's {@link SqlRowSet} interface.
*
* <p>This implementation wraps a <code>javax.sql.ResultSet</code>,
* catching any SQLExceptions and translating them to the
* appropriate Spring {@link InvalidResultSetAccessException}.
* <p>This implementation wraps a <code>javax.sql.ResultSet</code>, catching any SQLExceptions
* and translating them to the appropriate Spring {@link InvalidResultSetAccessException}.
*
* <p>Note: Since JDBC 4.0 it has been clarified that any methods using a String to identify the column should
* be using the column label. The column label is assigned using the ALIAS keyword in the SQL query string. When the
* query doesn't use an ALIAS the default label is the column name. Most JDBC ResultSet implementations follow this
* new pattern but there are some exceptions such as the com.sun.rowset.CachedRowSetImpl which only uses the column
* name ignoring any column labels. Since Spring 3.0.5 this class will translate column labels to the correct column
* index to provide better support for the com.sun.rowset.CachedRowSetImpl which is the default implementation used by
* the JdbcTemplate when working with RowSets.
* <p>The passed-in ResultSets should already be disconnected if the SqlRowSet is supposed
* to be usable in a disconnected fashion. This means that you will usually pass in a
* <code>javax.sql.rowset.CachedRowSet</code>, which implements the ResultSet interface.
*
* <p>The passed-in ResultSets should already be disconnected if the SqlRowSet
* is supposed to be usable in a disconnected fashion. This means that
* you will usually pass in a <code>javax.sql.rowset.CachedRowSet</code>,
* which implements the ResultSet interface.
* <p>Note: Since JDBC 4.0, it has been clarified that any methods using a String to identify
* the column should be using the column label. The column label is assigned using the ALIAS
* keyword in the SQL query string. When the query doesn't use an ALIAS, the default label is
* the column name. Most JDBC ResultSet implementations follow this new pattern but there are
* exceptions such as the <code>com.sun.rowset.CachedRowSetImpl</code> class which only uses
* the column name, ignoring any column labels. As of Spring 3.0.5, ResultSetWrappingSqlRowSet
* will translate column labels to the correct column index to provide better support for the
* <code>com.sun.rowset.CachedRowSetImpl</code> which is the default implementation used by
* {@link org.springframework.jdbc.core.JdbcTemplate} when working with RowSets.
*
* <p>Note: This class implements the <code>java.io.Serializable</code>
* marker interface through the SqlRowSet interface, but is only actually
* serializable if the disconnected ResultSet/RowSet contained in it is
* serializable. Most CachedRowSet implementations are actually serializable.
* <p>Note: This class implements the <code>java.io.Serializable</code> marker interface
* through the SqlRowSet interface, but is only actually serializable if the disconnected
* ResultSet/RowSet contained in it is serializable. Most CachedRowSet implementations
* are actually serializable, so this should usually work out.
*
* @author Thomas Risberg
* @author Juergen Hoeller
* @since 1.2
* @see java.sql.ResultSet
* @see javax.sql.rowset.CachedRowSet
* @see org.springframework.jdbc.core.JdbcTemplate#queryForRowSet
*/
public class ResultSetWrappingSqlRowSet implements SqlRowSet {
......@@ -97,13 +99,14 @@ public class ResultSetWrappingSqlRowSet implements SqlRowSet {
int columnCount = rsmd.getColumnCount();
this.columnLabelMap = new HashMap<String, Integer>(columnCount);
for (int i = 1; i <= columnCount; i++) {
columnLabelMap.put(rsmd.getColumnLabel(i), Integer.valueOf(i));
this.columnLabelMap.put(rsmd.getColumnLabel(i), i);
}
}
else {
this.columnLabelMap = new HashMap<String, Integer>(0);
this.columnLabelMap = Collections.emptyMap();
}
} catch (SQLException se) {
}
catch (SQLException se) {
throw new InvalidResultSetAccessException(se);
}
......@@ -130,16 +133,18 @@ public class ResultSetWrappingSqlRowSet implements SqlRowSet {
* @see java.sql.ResultSet#findColumn(String)
*/
public int findColumn(String columnLabel) throws InvalidResultSetAccessException {
Integer columnIndex = columnLabelMap.get(columnLabel);
if (columnIndex == null) {
Integer columnIndex = this.columnLabelMap.get(columnLabel);
if (columnIndex != null) {
return columnIndex;
}
else {
try {
columnIndex = this.resultSet.findColumn(columnLabel);
return this.resultSet.findColumn(columnLabel);
}
catch (SQLException se) {
throw new InvalidResultSetAccessException(se);
}
}
return columnIndex.intValue();
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册