/*
* @(#)RowSetMetaDataImpl.java 1.13 06/05/28
*
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
package javax.sql.rowset;
import java.sql.*;
import javax.sql.*;
import java.io.*;
import java.lang.reflect.*;
/**
* Provides implementations for the methods that set and get
* metadata information about a <code>RowSet</code> object's columns.
* A <code>RowSetMetaDataImpl</code> object keeps track of the
* number of columns in the rowset and maintains an internal array
* of column attributes for each column.
* <P>
* A <code>RowSet</code> object creates a <code>RowSetMetaDataImpl</code>
* object internally in order to set and retrieve information about
* its columns.
* <P>
* NOTE: All metadata in a <code>RowSetMetaDataImpl</code> object
* should be considered as unavailable until the <code>RowSet</code> object
* that it describes is populated.
* Therefore, any <code>RowSetMetaDataImpl</code> method that retrieves information
* is defined as having unspecified behavior when it is called
* before the <code>RowSet</code> object contains data.
*/
public class RowSetMetaDataImpl implements RowSetMetaData, Serializable {
/**
* The number of columns in the <code>RowSet</code> object that created
* this <code>RowSetMetaDataImpl</code> object.
* @serial
*/
private int colCount;
/**
* An array of <code>ColInfo</code> objects used to store information
* about each column in the <code>RowSet</code> object for which
* this <code>RowSetMetaDataImpl</code> object was created. The first
* <code>ColInfo</code> object in this array contains information about
* the first column in the <code>RowSet</code> object, the second element
* contains information about the second column, and so on.
* @serial
*/
private ColInfo[] colInfo;
/**
* Checks to see that the designated column is a valid column number for
* the <code>RowSet</code> object for which this <code>RowSetMetaDataImpl</code>
* was created. To be valid, a column number must be greater than
* <code>0</code> and less than or equal to the number of columns in a row.
* @throws <code>SQLException</code> with the message "Invalid column index"
* if the given column number is out of the range of valid column
* numbers for the <code>RowSet</code> object
*/
private void checkColRange(int col) throws SQLException {
if (col <= 0 || col > colCount) {
throw new SQLException("Invalid column index :"+col);
}
}
/**
* Checks to see that the given SQL type is a valid column type and throws an
* <code>SQLException</code> object if it is not.
* To be valid, a SQL type must be one of the constant values
* in the <code><a href="../../sql/Types.html">java.sql.Types</a></code>
* class.
*
* @param SQLType an <code>int</code> defined in the class <code>java.sql.Types</code>
* @throws SQLException if the given <code>int</code> is not a constant defined in the
* class <code>java.sql.Types</code>
*/
private void checkColType(int SQLType) throws SQLException {
try {
Class c = java.sql.Types.class;
Field[] publicFields = c.getFields();
int fieldValue = 0;
for (int i = 0; i < publicFields.length; i++) {
fieldValue = publicFields[i].getInt(c);
if (fieldValue == SQLType) {
return;
}
}
} catch (Exception e) {
throw new SQLException(e.getMessage());
}
throw new SQLException("Invalid SQL type for column");
}
/**
* Sets to the given number the number of columns in the <code>RowSet</code>
* object for which this <code>RowSetMetaDataImpl</code> object was created.
*
=1= |