Package com.ziclix.python.sql
Class DataHandler
java.lang.Object
com.ziclix.python.sql.DataHandler
- Direct Known Subclasses:
FilterDataHandler
,Jython22DataHandler
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.
- Author:
- brian zimmer
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionReturns a list of datahandlers chained together through the use of delegation.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.getMetaDataName
(PyObject name) Some database vendors are case sensitive on calls to DatabaseMetaData, most notably Oracle.getProcedure
(PyCursor cursor, PyObject name) A factory method for determing the correct procedure class to use per the cursor type.getPyObject
(CallableStatement stmt, int col, int type) Given a CallableStatement, column and type, return the appropriate Jython object.getPyObject
(ResultSet set, int col, int type) Given a ResultSet, column and type, return the appropriate Jython object.Returns the row id of the last executed statement.static final DataHandler
Build the DataHandler chain depending on the VM.void
postExecute
(Statement stmt) A callback after successfully executing the statement.void
preExecute
(Statement stmt) A callback prior to each execution of the statement.static final byte[]
read
(InputStream stream) Consume the InputStream into an byte array and close the InputStream.static String
Consume the Reader into a String and close the Reader.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.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.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.toString()
Returns the classname of this datahandler.
-
Constructor Details
-
DataHandler
public DataHandler()Handle most generic Java data types.
-
-
Method Details
-
getMetaDataName
Some database vendors are case sensitive on calls to DatabaseMetaData, most notably Oracle. This callback allows a DataHandler to affect the name. -
getProcedure
A factory method for determing the correct procedure class to use per the cursor type.- Parameters:
cursor
- an open cursorname
- the name of the procedure to invoke- Returns:
- an instance of a Procedure
- Throws:
SQLException
-
getRowId
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
-
preExecute
A callback prior to each execution of the statement. If the statement is a PreparedStatement, all the parameters will have been set.- Throws:
SQLException
-
postExecute
A callback after successfully executing the statement.- Throws:
SQLException
-
setJDBCObject
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 PreparedStatementindex
- the index for which this object is boundobject
- the PyObject in question- Throws:
SQLException
-
setJDBCObject
public void setJDBCObject(PreparedStatement stmt, int index, PyObject object, int type) throws SQLException 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 PreparedStatementindex
- the index for which this object is boundobject
- the PyObject in questiontype
- the java.sql.Types for which this PyObject should be bound- Throws:
SQLException
-
getPyObject
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 rowcol
- the column number (adjusted properly for JDBC)type
- the column type- Throws:
SQLException
- if the type is unmappable
-
getPyObject
Given a CallableStatement, column and type, return the appropriate Jython object.- Parameters:
stmt
- the CallableStatementcol
- the column number (adjusted properly for JDBC)type
- the column type- Throws:
SQLException
- if the type is unmappable
-
registerOut
public void registerOut(CallableStatement statement, int index, int colType, int dataType, String dataTypeName) throws SQLException 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 numbercolType
- the column as from DatabaseMetaData (eg, procedureColumnOut)dataType
- the JDBC datatype from TypesdataTypeName
- the JDBC datatype name- Throws:
SQLException
-
checkNull
public static final boolean checkNull(PreparedStatement stmt, int index, PyObject object, int type) throws SQLException 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
- Throws:
SQLException
-
read
Consume the InputStream into an byte array and close the InputStream.- Returns:
- the contents of the InputStream a byte[]
-
read
Consume the Reader into a String and close the Reader.- Returns:
- the contents of the Reader as a String
-
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
-
__chain__
Returns a list of datahandlers chained together through the use of delegation.- Returns:
- a list of datahandlers
-
toString
Returns the classname of this datahandler.
-