I want to send array of integer and retrieve array of sturct from Oracle Procedure.
but I get Error: "java.sql.SQLException: Not a wrapper of oracle.jdbc.driver.OracleConnection"
Environment is:
oracle Export: Release 11.2.0.1.0
Apache Tomcat/8.0.37
Struts 1.1
Java 1.8
JDBC driver version is 10.1.0.2.0
SERVER.XML
<Resource name="jdbc/db" auth="Container" type="oracle.jdbc.pool.OracleDataSource" accessToUnderlyingConnectionAllowed="true"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
username="USER" password="password" maxTotal="20" maxIdle="10" maxWaitMillis="-1"
driverClassName="oracle.jdbc.OracleDriver" url="URL" />
My Code is
public SalryHdrDTO getFacWrkingDays(SalryHdrDTO objSalryHdr ) throws HrisException{
this.logger.info(SalryDAO.class.getName() + " --->> getFacWrkingDays() Starts");
Connection conn = null;
try {
conn = this.connectionPoolerObj.getConnection(); //from JNDI
if (conn != null){
if (objSalryHdr != null){
int[] multiFacId = objSalryHdr.getMultiFacId();
final String typeName = "HRIS.FAC_OBJ"; //created in database
final String typeTableName = "HRIS.ARR_FAC_OBJ"; //created in database
OracleConnection oConn=null;
//if (conn.isWrapperFor(OracleConnection.class)) {
//ERROR : java.sql.SQLException: Not a wrapper of oracle.jdbc.driver.OracleConnection
// if I use "oracle.jdbc.OracleConnection.class" it gives compilation error
oConn = conn.unwrap(OracleConnection.class);
//}
ArrayDescriptor des = ArrayDescriptor.createDescriptor("HRIS.ARR_FAC_ID", oConn);
ARRAY arr_fac = new ARRAY(des,conn,multiFacId);
final StructDescriptor structDescriptor = StructDescriptor.createDescriptor(typeName.toUpperCase(), oConn);
final ResultSetMetaData metaData = structDescriptor.getMetaData();
CallableStatement st = conn.prepareCall("call HRIS.EMP_SAL_CALC.get_fac_wrking_days(?,?,?)");
// Passing an array to the procedure -
st.setArray(1, arr_fac);
st.registerOutParameter(2, Types.INTEGER);
st.registerOutParameter(3,Types.ARRAY,typeTableName);
st.execute();
System.out.println("size : "+st.getInt(2));
Object[] data = (Object[]) ((Array) st.getObject(3)).getArray();
for(Object tmp : data) {
Struct row = (Struct) tmp;
// Attributes are index 1 based...
int idx = 1;
for(Object attribute : row.getAttributes()) {
System.out.println(metaData.getColumnName(idx) + " = " + attribute);
++idx;
}
System.out.println("---");
}
st.close();
}
}
}
catch (Exception ex) {
this.logger.debug(SalryDAO.class.getName() + " getFacWrkingDays() Exception Raised --->> " + ex.getMessage());
throw new HrisException(ex.getMessage());
} finally {
this.connectionPoolerObj.returnConnection(conn);
}
this.logger.info(SalryDAO.class.getName() + " --->> getFacWrkingDays() Starts");
return objSalryHdr;
}