com.ziclix.python.sql

Class DataHandler

public class DataHandler extends Object

The DataHandler is responsible mapping the JDBC data type to a Jython object. Depending on the version of the JDBC implementation and the particulars of the driver, the type mapping can be significantly different. This interface can also be used to change the behaviour of the default mappings provided by the cursor. This might be useful in handling more complicated data types such as BLOBs, CLOBs and Arrays.

Version: $Revision: 2939 $

Author: brian zimmer last revised by $Author: kzuberi $

Constructor Summary
DataHandler()
Handle most generic Java data types.
Method Summary
static booleancheckNull(PreparedStatement stmt, int index, PyObject object, int type)
Handles checking if the object is null or None and setting it on the statement.
StringgetMetaDataName(PyObject name)
Some database vendors are case sensitive on calls to DatabaseMetaData, most notably Oracle.
ProceduregetProcedure(PyCursor cursor, PyObject name)
A factory method for determing the correct procedure class to use per the cursor type.
PyObjectgetPyObject(ResultSet set, int col, int type)
Given a ResultSet, column and type, return the appropriate Jython object.
PyObjectgetPyObject(CallableStatement stmt, int col, int type)
Given a CallableStatement, column and type, return the appropriate Jython object.
PyObjectgetRowId(Statement stmt)
Returns the row id of the last executed statement.
static DataHandlergetSystemDataHandler()
Build the DataHandler chain depending on the VM.
voidpostExecute(Statement stmt)
A callback after successfully executing the statement.
voidpreExecute(Statement stmt)
A callback prior to each execution of the statement.
static byte[]read(InputStream stream)
Since the driver needs to the know the length of all streams, read it into a byte[] array.
static Stringread(Reader reader)
Read all the chars from the Reader into the String.
voidregisterOut(CallableStatement statement, int index, int colType, int dataType, String dataTypeName)
Called when a stored procedure or function is executed and OUT parameters need to be registered with the statement.
voidsetJDBCObject(PreparedStatement stmt, int index, PyObject object)
Any .execute() which uses prepared statements will receive a callback for deciding how to map the PyObject to the appropriate JDBC type.
voidsetJDBCObject(PreparedStatement stmt, int index, PyObject object, int type)
Any .execute() which uses prepared statements will receive a callback for deciding how to map the PyObject to the appropriate JDBC type.
StringtoString()
Returns the classname of this datahandler.
PyObject__chain__()
Returns a list of datahandlers chained together through the use of delegation.

Constructor Detail

DataHandler

public DataHandler()
Handle most generic Java data types.

Method Detail

checkNull

public static final boolean checkNull(PreparedStatement stmt, int index, PyObject object, int type)
Handles checking if the object is null or None and setting it on the statement.

Returns: true if the object is null and was set on the statement, false otherwise

getMetaDataName

public String getMetaDataName(PyObject name)
Some database vendors are case sensitive on calls to DatabaseMetaData, most notably Oracle. This callback allows a DataHandler to affect the name.

getProcedure

public Procedure getProcedure(PyCursor cursor, PyObject name)
A factory method for determing the correct procedure class to use per the cursor type.

Parameters: cursor an open cursor name the name of the procedure to invoke

Returns: an instance of a Procedure

Throws: SQLException

getPyObject

public PyObject getPyObject(ResultSet set, int col, int type)
Given a ResultSet, column and type, return the appropriate Jython object.

Note: DO NOT iterate the ResultSet.

Parameters: set the current ResultSet set to the current row col the column number (adjusted properly for JDBC) type the column type

Throws: SQLException if the type is unmappable

getPyObject

public PyObject getPyObject(CallableStatement stmt, int col, int type)
Given a CallableStatement, column and type, return the appropriate Jython object.

Parameters: stmt the CallableStatement col the column number (adjusted properly for JDBC) type the column type

Throws: SQLException if the type is unmappable

getRowId

public PyObject getRowId(Statement stmt)
Returns the row id of the last executed statement.

Parameters: stmt the current statement

Returns: the row id of the last executed statement or None

Throws: SQLException thrown if an exception occurs

getSystemDataHandler

public static final DataHandler getSystemDataHandler()
Build the DataHandler chain depending on the VM. This guarentees a DataHandler but might additionally chain a JDBC2.0 or JDBC3.0 implementation.

Returns: a DataHandler configured for the VM version

postExecute

public void postExecute(Statement stmt)
A callback after successfully executing the statement.

preExecute

public void preExecute(Statement stmt)
A callback prior to each execution of the statement. If the statement is a PreparedStatement, all the parameters will have been set.

read

public static final byte[] read(InputStream stream)
Since the driver needs to the know the length of all streams, read it into a byte[] array.

Returns: the stream as a byte[]

read

public static final String read(Reader reader)
Read all the chars from the Reader into the String.

Returns: the contents of the Reader in a String

registerOut

public void registerOut(CallableStatement statement, int index, int colType, int dataType, String dataTypeName)
Called when a stored procedure or function is executed and OUT parameters need to be registered with the statement.

Parameters: statement index the JDBC offset column number colType the column as from DatabaseMetaData (eg, procedureColumnOut) dataType the JDBC datatype from Types dataTypeName the JDBC datatype name

Throws: SQLException

setJDBCObject

public void setJDBCObject(PreparedStatement stmt, int index, PyObject object)
Any .execute() which uses prepared statements will receive a callback for deciding how to map the PyObject to the appropriate JDBC type.

Parameters: stmt the current PreparedStatement index the index for which this object is bound object the PyObject in question

Throws: SQLException

setJDBCObject

public void setJDBCObject(PreparedStatement stmt, int index, PyObject object, int type)
Any .execute() which uses prepared statements will receive a callback for deciding how to map the PyObject to the appropriate JDBC type. The type is the JDBC type as obtained from java.sql.Types.

Parameters: stmt the current PreparedStatement index the index for which this object is bound object the PyObject in question type the java.sql.Types for which this PyObject should be bound

Throws: SQLException

toString

public String toString()
Returns the classname of this datahandler.

__chain__

public PyObject __chain__()
Returns a list of datahandlers chained together through the use of delegation.

Returns: a list of datahandlers

Jython homepage