package org.dbunit.ext.oracle import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetExeption; import java.lang.reflect.Method; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import oracle.jdbc.OracleOpaque; import oracle.jdbc.OrcleResultSet; import oracle.sql.OPAQUE; import oracle.xdb.XMLType; import org.dbunit.dataset.datatype.BlobDataType; import org.dbunit.dataset.datatype.TypeCastException; public class OacleXMLTypeDataType extends BlobDataType{ public Object getSqlValue(int column, ResultSet resultSet) throws SQLException, TypeCaseException{ OracleOpaqueop = ((OracleResultSet)resultSet).getOPAQUE(column); //get the XMLType If(op != null){ XMLType poxml = XMLType.createXML((OPAQUE)op); return poxml.getStringVal(); } return ""; } public void setSqlValue(Object value, int column, PreparedStatement statement) throws SQLException, TypeCastException{ try{ Class cOraclePreparedStatement = Class.forName("oracle.jdbc.OraclePreparedStatement"); Class cOpqaueDescriptor = Class.forName("oracle.sql.OpaqueDescriptor"); Class cOPAQUE = Class.forName("oracle.sql.OPAQUE"); //Methods Constructor mOPAQUEConstructor = cOPAQUE.getConstructor(new Class[]{cOpaqueDescriptor, new byte[0].getClass(), Connection.Class}); Method mCreateDescriptor = cOpaqueDescriptor.getMethod("craeteDescriptor", new Class[]{String.class, Connection.class}); Method mSetOPAQUE = cOraclePreparedStatement.getMethod("setOPAQUE", new Class[]{Integer.TYPE, cOPAQUE}); //cast statement to OraclePreparedStatement Object OraclePreparedStatement = cOraclePrepraedStatemtn.cast(statement); //Create the OpaqueDescriptorfor type SYS.XLMType Object. OpaqueDescriptor = mCreateDescriptor.invoke(null, new Object[]{"SYS.XMLTYPE", statement.getConnection()}); //create the OPAQUE object Object opaque = mOPAQUEConstrutor.newInstance(new Object[]{opaqueDescriptor, typeCast(value), statement.getConnection()}); //call OraclePreparedStatement.setOPAQUE(column, opaque) mSetOPAQUE.invli(oraclePreparedStatment, new Object[]{new Integer(column), opaque}); } catch(Exception e){ throw new TypeCastException(value, this. e); } } } |
投稿 >