org.firebirdsql.jdbc

Class AbstractPreparedStatement

Implemented Interfaces:
FirebirdPreparedStatement, FirebirdStatement, PreparedStatement, Statement, Synchronizable
Known Direct Subclasses:
AbstractCallableStatement

public abstract class AbstractPreparedStatement
extends AbstractStatement
implements FirebirdPreparedStatement

Implementation of java.sql.PreparedStatementinterface. This class contains all methods from the JDBC 2.0 specification.
Authors:
David Jencks
Roman Rokytskyy

Field Summary

protected boolean[]
isParamSet

Fields inherited from class org.firebirdsql.jdbc.AbstractStatement

completed, fetchSize, firstWarning, fixedStmt, gdsHelper, hasMoreResults, isResultSet, maxRows, statementListener

Fields inherited from interface org.firebirdsql.jdbc.FirebirdPreparedStatement

TYPE_COMMIT, TYPE_DDL, TYPE_DELETE, TYPE_EXEC_PROCEDURE, TYPE_GET_SEGMENT, TYPE_INSERT, TYPE_PUT_SEGMENT, TYPE_ROLLBACK, TYPE_SELECT, TYPE_SELECT_FOR_UPDATE, TYPE_SET_GENERATOR, TYPE_START_TRANS, TYPE_UPDATE

Fields inherited from interface org.firebirdsql.jdbc.FirebirdStatement

CLOSE_ALL_RESULTS, CLOSE_CURRENT_RESULT, KEEP_CURRENT_RESULT

Constructor Summary

AbstractPreparedStatement(org.firebirdsql.gds.impl.GDSHelper c, String sql, int rsType, int rsConcurrency, int rsHoldability, FBObjectListener.StatementListener statementListener, FBObjectListener.BlobListener blobListener, boolean metaDataQuery)
Create instance of this class and prepare SQL statement.
AbstractPreparedStatement(org.firebirdsql.gds.impl.GDSHelper c, int rsType, int rsConcurrency, int rsHoldability, FBObjectListener.StatementListener statementListener, FBObjectListener.BlobListener blobListener)
Create instance of this class for the specified result set type and concurrency.

Method Summary

void
addBatch()
Adds a set of parameters to this PreparedStatement object's batch of commands.
void
clearBatch()
Makes the set of commands in the current batch empty.
void
clearParameters()
Clears the current parameter values immediately.
void
completeStatement()
boolean
execute()
Executes any kind of SQL statement.
int[]
executeBatch()
Submits a batch of commands to the database for execution and if all commands execute successfully, returns an array of update counts.
ResultSet
executeQuery()
Executes the SQL query in this PreparedStatement object and returns the result set generated by the query.
int
executeUpdate()
Executes the SQL INSERT, UPDATE or DELETE statement in this PreparedStatement object.
String
getExecutionPlan()
Get the execution plan of this PreparedStatement
protected org.firebirdsql.jdbc.field.FBField
getField(int columnIndex)
Factory method for the field access objects
ResultSetMetaData
getMetaData()
Gets the number, types and properties of a ResultSet object's columns.
int
getStatementType()
Get the statement type of this PreparedStatement.
protected XSQLVAR
getXsqlvar(int columnIndex)
Returns the XSQLVAR structure for the specified column.
protected boolean
internalExecute(boolean sendOutParams)
Execute this statement.
protected void
prepareFixedStatement(String sql, boolean describeBind)
Prepare fixed statement and initialize parameters.
void
setArray(int i, Array x)
Sets the designated parameter to the given Array object.
void
setAsciiStream(int parameterIndex, InputStream x, int length)
Sets the designated parameter to the given input stream, which will have the specified number of bytes.
void
setBigDecimal(int parameterIndex, BigDecimal x)
Sets the designated parameter to the given BigDecimal
void
setBinaryStream(int parameterIndex, InputStream inputStream, int length)
Sets the designated parameter to the given input stream, which will have the specified number of bytes.
void
setBlob(int parameterIndex, Blob blob)
Sets the designated parameter to the given Blob object.
void
setBoolean(int parameterIndex, boolean x)
Sets the designated parameter to the given boolean value.
void
setByte(int parameterIndex, byte x)
Sets the designated parameter to the given byte value.
void
setBytes(int parameterIndex, byte[] x)
Set the designated parameter to the given byte array.
void
setCharacterStream(int parameterIndex, Reader reader, int length)
Sets the designated parameter to the given Reader object, which is the given number of characters long.
void
setClob(int i, Clob x)
Sets the designated parameter to the given Clob object.
void
setDate(int parameterIndex, Date x)
Sets the designated parameter to the given date value.
void
setDate(int parameterIndex, Date x, Calendar cal)
Sets the designated parameter to the given java.sql.Date value, using the given Calendar object.
void
setDouble(int parameterIndex, double x)
Sets the designated parameter to the given double value.
void
setFloat(int parameterIndex, float x)
Sets the designated parameter to the given floate value.
void
setInt(int parameterIndex, int x)
Sets the designated parameter to the given int value.
void
setLong(int parameterIndex, long x)
Sets the designated parameter to the given long value.
void
setNull(int parameterIndex, int sqlType)
Sets the designated parameter to SQL NULL.
void
setNull(int parameterIndex, int sqlType, String typeName)
Sets the designated parameter to SQL NULL.
void
setObject(int parameterIndex, Object x)
Sets the value of the designated parameter with the given object.
void
setObject(int parameterIndex, Object x, int targetSqlType)
Sets the value of the designated parameter with the given object.
void
setObject(int parameterIndex, Object x, int targetSqlType, int scale)
Sets the value of the designated parameter with the given object.
void
setRef(int i, Ref x)
Sets the designated parameter to the given REF(<structured-type>) value.
void
setShort(int parameterIndex, short x)
Sets the designated parameter to the given short value.
void
setString(int parameterIndex, String x)
Sets the designated parameter to the given String value.
void
setStringForced(int parameterIndex, String x)
Sets the designated parameter to the given String value.
void
setTime(int parameterIndex, Time x)
Sets the designated parameter to the given Time value.
void
setTime(int parameterIndex, Time x, Calendar cal)
Sets the designated parameter to the given java.sql.Time value, using the given Calendar object.
void
setTimestamp(int parameterIndex, Timestamp x)
Sets the designated parameter to the given Timestamp value.
void
setTimestamp(int parameterIndex, Timestamp x, Calendar cal)
Sets the designated parameter to the given java.sql.Timestamp value, using the given Calendar object.
void
setUnicodeStream(int parameterIndex, InputStream x, int length)
Deprecated. I really have no idea if there is anything else we should be doing here

Methods inherited from class org.firebirdsql.jdbc.AbstractStatement

addBatch, addWarning, cancel, clearBatch, clearWarnings, close, completeStatement, execute, executeBatch, executeQuery, executeUpdate, finalize, forgetResultSet, getConnection, getCurrentResultSet, getDeletedRowsCount, getFetchDirection, getFetchSize, getInsertedRowsCount, getLastExecutionPlan, getMaxFieldSize, getMaxRows, getMoreResults, getMoreResults, getQueryTimeout, getResultSet, getResultSet, getResultSetConcurrency, getResultSetHoldability, getResultSetType, getSynchronizationObject, getUpdateCount, getUpdatedRowsCount, getWarnings, hasOpenResultSet, internalExecute, isExecuteProcedureStatement, isValid, nativeSQL, notifyStatementCompleted, notifyStatementCompleted, notifyStatementStarted, notifyStatementStarted, prepareFixedStatement, setCursorName, setEscapeProcessing, setFetchDirection, setFetchSize, setMaxFieldSize, setMaxRows, setQueryTimeout, toArray

Field Details

isParamSet

protected boolean[] isParamSet

Constructor Details

AbstractPreparedStatement

protected AbstractPreparedStatement(org.firebirdsql.gds.impl.GDSHelper c,
                                    String sql,
                                    int rsType,
                                    int rsConcurrency,
                                    int rsHoldability,
                                    FBObjectListener.StatementListener statementListener,
                                    FBObjectListener.BlobListener blobListener,
                                    boolean metaDataQuery)
            throws SQLException
Create instance of this class and prepare SQL statement.
Parameters:
c - connection to be used.
sql - SQL statement to prepare.
rsType - type of result set to create.
rsConcurrency - result set concurrency.

AbstractPreparedStatement

protected AbstractPreparedStatement(org.firebirdsql.gds.impl.GDSHelper c,
                                    int rsType,
                                    int rsConcurrency,
                                    int rsHoldability,
                                    FBObjectListener.StatementListener statementListener,
                                    FBObjectListener.BlobListener blobListener)
            throws SQLException
Create instance of this class for the specified result set type and concurrency. This constructor is used only in AbstractCallableStatement since the statement is prepared right before the execution.
Parameters:
c - instance of GDSHelper that will be used to perform all database activities.
rsType - desired result set type.
rsConcurrency - desired result set concurrency.
statementListener - statement listener that will be notified about the statement start, close and completion.

Method Details

addBatch

public void addBatch()
            throws SQLException
Adds a set of parameters to this PreparedStatement object's batch of commands.
Since:
1.2

clearBatch

public void clearBatch()
            throws SQLException
Makes the set of commands in the current batch empty. This method is optional.
Overrides:
clearBatch in interface AbstractStatement
Since:
1.2

clearParameters

public void clearParameters()
            throws SQLException
Clears the current parameter values immediately.

In general, parameter values remain in force for repeated use of a statement. Setting a parameter value automatically clears its previous value. However, in some cases it is useful to immediately release the resources used by the current parameter values; this can be done by calling the method clearParameters.


completeStatement

public void completeStatement()
            throws SQLException
Overrides:
completeStatement in interface AbstractStatement

execute

public boolean execute()
            throws SQLException
Executes any kind of SQL statement. Some prepared statements return multiple results; the execute method handles these complex statements as well as the simpler form of statements handled by the methods executeQuery and executeUpdate.
See Also:
Statement.execute

executeBatch

public int[] executeBatch()
            throws SQLException
Submits a batch of commands to the database for execution and if all commands execute successfully, returns an array of update counts. The int elements of the array that is returned are ordered to correspond to the commands in the batch, which are ordered according to the order in which they were added to the batch. The elements in the array returned by the method executeBatch may be one of the following:
  1. A number greater than or equal to zero -- indicates that the command was processed successfully and is an update count giving the number of rows in the database that were affected by the command's execution
  2. A value of -2-- indicates that the command was processed successfully but that the number of rows affected is unknown

    If one of the commands in a batch update fails to execute properly, this method throws a BatchUpdateException, and a JDBC driver may or may not continue to process the remaining commands in the batch. However, the driver's behavior must be consistent with a particular DBMS, either always continuing to process commands or never continuing to process commands. If the driver continues processing after a failure, the array returned by the method BatchUpdateException.getUpdateCounts will contain as many elements as there are commands in the batch, and at least one of the elements will be the following:

  3. A value of -3-- indicates that the command failed to execute successfully and occurs only if a driver continues to process commands after a command fails

A driver is not required to implement this method. The possible implementations and return values have been modified in the Java 2 SDK, Standard Edition, version 1.3 to accommodate the option of continuing to proccess commands in a batch update after a BatchUpdateException obejct has been thrown.

Overrides:
executeBatch in interface AbstractStatement
Returns:
an array of update counts containing one element for each command in the batch. The elements of the array are ordered according to the order in which commands were added to the batch.
Since:
1.3

executeQuery

public ResultSet executeQuery()
            throws SQLException
Executes the SQL query in this PreparedStatement object and returns the result set generated by the query.
Returns:
a ResultSet object that contains the data produced by the query; never null

executeUpdate

public int executeUpdate()
            throws SQLException
Executes the SQL INSERT, UPDATE or DELETE statement in this PreparedStatement object. In addition, SQL statements that return nothing, such as SQL DDL statements, can be executed.
Returns:
either the row count for INSERT, UPDATE or DELETE statements; or 0 for SQL statements that return nothing

getExecutionPlan

public String getExecutionPlan()
            throws FBSQLException
Get the execution plan of this PreparedStatement
Specified by:
getExecutionPlan in interface FirebirdPreparedStatement
Returns:
The execution plan of the statement

getField

protected org.firebirdsql.jdbc.field.FBField getField(int columnIndex)
            throws SQLException
Factory method for the field access objects

getMetaData

public ResultSetMetaData getMetaData()
            throws SQLException
Gets the number, types and properties of a ResultSet object's columns.
Returns:
the description of a ResultSet object's columns
Since:
1.2

getStatementType

public int getStatementType()
            throws FBSQLException
Get the statement type of this PreparedStatement. The returned value will be one of the TYPE_* constant values.
Specified by:
getStatementType in interface FirebirdPreparedStatement
Returns:
The identifier for the given statement's type

getXsqlvar

protected XSQLVAR getXsqlvar(int columnIndex)
Returns the XSQLVAR structure for the specified column.

internalExecute

protected boolean internalExecute(boolean sendOutParams)
            throws SQLException
Execute this statement. Method checks whether all parameters are set, flushes all "flushable" fields that might contain cached data and executes the statement.
Parameters:
sendOutParams -
Returns:
true if the statement has more result sets.

prepareFixedStatement

protected void prepareFixedStatement(String sql,
                                     boolean describeBind)
            throws GDSException,
                   SQLException
Prepare fixed statement and initialize parameters.
Overrides:
prepareFixedStatement in interface AbstractStatement

setArray

public void setArray(int i,
                     Array x)
            throws SQLException
Sets the designated parameter to the given Array object. Sets an Array parameter.
Parameters:
i - the first parameter is 1, the second is 2, ...
x - an Array object that maps an SQL ARRAY value
Since:
1.2

setAsciiStream

public void setAsciiStream(int parameterIndex,
                           InputStream x,
                           int length)
            throws SQLException
Sets the designated parameter to the given input stream, which will have the specified number of bytes. When a very large ASCII value is input to a LONGVARCHAR parameter, it may be more practical to send it via a java.io.InputStream. Data will be read from the stream as needed until end-of-file is reached. The JDBC driver will do any necessary conversion from ASCII to the database char format.

Note: This stream object can either be a standard Java stream object or your own subclass that implements the standard interface.

Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - the Java input stream that contains the ASCII parameter value
length - the number of bytes in the stream

setBigDecimal

public void setBigDecimal(int parameterIndex,
                          BigDecimal x)
            throws SQLException
Sets the designated parameter to the given BigDecimal
Parameters:
parameterIndex - The first parameter is 1, second is 2, ...
x - The BigDecimal to be set as a parameter

setBinaryStream

public void setBinaryStream(int parameterIndex,
                            InputStream inputStream,
                            int length)
            throws SQLException
Sets the designated parameter to the given input stream, which will have the specified number of bytes.

Note: This stream object can either be a standard Java stream object or your own subclass that implements the standard interface.

Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
inputStream - the Java input stream
length - the number of bytes in the stream

setBlob

public void setBlob(int parameterIndex,
                    Blob blob)
            throws SQLException
Sets the designated parameter to the given Blob object.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
blob - a Blob object that maps an SQL BLOB value
Since:
1.2

setBoolean

public void setBoolean(int parameterIndex,
                       boolean x)
            throws SQLException
Sets the designated parameter to the given boolean value.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - The boolean value to be set

setByte

public void setByte(int parameterIndex,
                    byte x)
            throws SQLException
Sets the designated parameter to the given byte value.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - The byte value to be set

setBytes

public void setBytes(int parameterIndex,
                     byte[] x)
            throws SQLException
Set the designated parameter to the given byte array.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - The byte array to be set

setCharacterStream

public void setCharacterStream(int parameterIndex,
                               Reader reader,
                               int length)
            throws SQLException
Sets the designated parameter to the given Reader object, which is the given number of characters long. When a very large UNICODE value is input to a LONGVARCHAR parameter, it may be more practical to send it via a java.io.Reader object. The data will be read from the stream as needed until end-of-file is reached. The JDBC driver will do any necessary conversion from UNICODE to the database char format.

Note: This stream object can either be a standard Java stream object or your own subclass that implements the standard interface.

Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
reader - the java reader which contains the UNICODE data
length - the number of characters in the stream
Since:
1.2

setClob

public void setClob(int i,
                    Clob x)
            throws SQLException
Sets the designated parameter to the given Clob object.
Parameters:
i - the first parameter is 1, the second is 2, ...
x - a Clob object that maps an SQL CLOB value
Since:
1.2

setDate

public void setDate(int parameterIndex,
                    Date x)
            throws SQLException
Sets the designated parameter to the given date value.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - The date value to be set

setDate

public void setDate(int parameterIndex,
                    Date x,
                    Calendar cal)
            throws SQLException
Sets the designated parameter to the given java.sql.Date value, using the given Calendar object. The driver uses the Calendar object to construct an SQL DATE value, which the driver then sends to the database. With a a Calendar object, the driver can calculate the date taking into account a custom timezone. If no Calendar object is specified, the driver uses the default timezone, which is that of the virtual machine running the application.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - the parameter value
cal - the Calendar object the driver will use to construct the date
Since:
1.2

setDouble

public void setDouble(int parameterIndex,
                      double x)
            throws SQLException
Sets the designated parameter to the given double value.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - The double value to be set

setFloat

public void setFloat(int parameterIndex,
                     float x)
            throws SQLException
Sets the designated parameter to the given floate value.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - The float value to be set

setInt

public void setInt(int parameterIndex,
                   int x)
            throws SQLException
Sets the designated parameter to the given int value.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - The int value to be set

setLong

public void setLong(int parameterIndex,
                    long x)
            throws SQLException
Sets the designated parameter to the given long value.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - The long value to be set

setNull

public void setNull(int parameterIndex,
                    int sqlType)
            throws SQLException
Sets the designated parameter to SQL NULL.

Note: You must specify the parameter's SQL type.

Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
sqlType - the SQL type code defined in java.sql.Types

setNull

public void setNull(int parameterIndex,
                    int sqlType,
                    String typeName)
            throws SQLException
Sets the designated parameter to SQL NULL. This version of the method setNull should be used for user-defined types and REF type parameters. Examples of user-defined types include: STRUCT, DISTINCT, JAVA_OBJECT, and named array types.

Note: To be portable, applications must give the SQL type code and the fully-qualified SQL type name when specifying a NULL user-defined or REF parameter. In the case of a user-defined type the name is the type name of the parameter itself. For a REF parameter, the name is the type name of the referenced type. If a JDBC driver does not need the type code or type name information, it may ignore it. Although it is intended for user-defined and Ref parameters, this method may be used to set a null parameter of any JDBC type. If the parameter does not have a user-defined or REF type, the given typeName is ignored.

Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
sqlType - a value from java.sql.Types
typeName - the fully-qualified name of an SQL user-defined type; ignored if the parameter is not a user-defined type or REF
Since:
1.2

setObject

public void setObject(int parameterIndex,
                      Object x)
            throws SQLException
Sets the value of the designated parameter with the given object.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - the object containing the parameter value

setObject

public void setObject(int parameterIndex,
                      Object x,
                      int targetSqlType)
            throws SQLException
Sets the value of the designated parameter with the given object. This method is like the method setObject above, except that it assumes a scale of zero.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - the object containing the input parameter value
targetSqlType - the SQL type (as defined in java.sql.Types) to be sent to the database

setObject

public void setObject(int parameterIndex,
                      Object x,
                      int targetSqlType,
                      int scale)
            throws SQLException
Sets the value of the designated parameter with the given object. The second argument must be an object type; for integral values, the java.lang equivalent objects should be used.

The given Java object will be converted to the given targetSqlType before being sent to the database. If the object has a custom mapping (is of a class implementing the interface SQLData), the JDBC driver should call the method SQLData.writeSQL to write it to the SQL data stream. If, on the other hand, the object is of a class implementing Ref, Blob, Clob, Struct, or Array, the driver should pass it to the database as a value of the corresponding SQL type.

Note that this method may be used to pass datatabase- specific abstract data types.

Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - the object containing the input parameter value
targetSqlType - the SQL type (as defined in java.sql.Types) to be sent to the database. The scale argument may further qualify this type.
scale - for java.sql.Types.DECIMAL or java.sql.Types.NUMERIC types, this is the number of digits after the decimal point. For all other types, this value will be ignored.
See Also:
Types

setRef

public void setRef(int i,
                   Ref x)
            throws SQLException
Sets the designated parameter to the given REF(<structured-type>) value.
Parameters:
i - the first parameter is 1, the second is 2, ...
x - an SQL REF value
Since:
1.2

setShort

public void setShort(int parameterIndex,
                     short x)
            throws SQLException
Sets the designated parameter to the given short value.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - The short value to be set

setString

public void setString(int parameterIndex,
                      String x)
            throws SQLException
Sets the designated parameter to the given String value.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - The String value to be set

setStringForced

public void setStringForced(int parameterIndex,
                            String x)
            throws SQLException
Sets the designated parameter to the given String value. This is a workaround for the ambiguous "operation was cancelled" response from the server for when an oversized string is set for a limited-size field. This method sets the string parameter without checking size constraints.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - The String value to be set

setTime

public void setTime(int parameterIndex,
                    Time x)
            throws SQLException
Sets the designated parameter to the given Time value.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - The Time value to be set

setTime

public void setTime(int parameterIndex,
                    Time x,
                    Calendar cal)
            throws SQLException
Sets the designated parameter to the given java.sql.Time value, using the given Calendar object. The driver uses the Calendar object to construct an SQL TIME value, which the driver then sends to the database. With a a Calendar object, the driver can calculate the time taking into account a custom timezone. If no Calendar object is specified, the driver uses the default timezone, which is that of the virtual machine running the application.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - the parameter value
cal - the Calendar object the driver will use to construct the time
Since:
1.2

setTimestamp

public void setTimestamp(int parameterIndex,
                         Timestamp x)
            throws SQLException
Sets the designated parameter to the given Timestamp value.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - The Timestamp value to be set

setTimestamp

public void setTimestamp(int parameterIndex,
                         Timestamp x,
                         Calendar cal)
            throws SQLException
Sets the designated parameter to the given java.sql.Timestamp value, using the given Calendar object. The driver uses the Calendar object to construct an SQL TIMESTAMP value, which the driver then sends to the database. With a a Calendar object, the driver can calculate the timestamp taking into account a custom timezone. If no Calendar object is specified, the driver uses the default timezone, which is that of the virtual machine running the application.
Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - the parameter value
cal - the Calendar object the driver will use to construct the timestamp
Since:
1.2

setUnicodeStream

public void setUnicodeStream(int parameterIndex,
                             InputStream x,
                             int length)
            throws SQLException

Deprecated. I really have no idea if there is anything else we should be doing here

Sets the designated parameter to the given input stream, which will have the specified number of bytes. When a very large UNICODE value is input to a LONGVARCHAR parameter, it may be more practical to send it via a java.io.InputStream object. The data will be read from the stream as needed until end-of-file is reached. The JDBC driver will do any necessary conversion from UNICODE to the database char format. The byte format of the Unicode stream must be Java UTF-8, as defined in the Java Virtual Machine Specification.

Note: This stream object can either be a standard Java stream object or your own subclass that implements the standard interface.

Parameters:
parameterIndex - the first parameter is 1, the second is 2, ...
x - the java input stream which contains the UNICODE parameter value
length - the number of bytes in the stream

Copyright B) 2001 David Jencks and other authors. All rights reserved.