Comment lire un TABLEAU de types retournés à partir d'une procédure stockée à l'aide de java?

C'est une continuation de la question publiée sous l'emplacement suivant:
Programme Java pour passer de la Liste de la Fève à une procédure stockée oracle Passe - ensemble de la liste à un seul coup, plutôt que d'ajouter des objets l'un après l'autre

J'ai essayé d'améliorer la procédure stockée mentionné dans le lien ci-dessus de l'emplacement et me confondre dans la mise en œuvre. Plutôt que de VARCHAR2 comme une sortie de la procédure que j'ai maintenant envie de retourner NUM_ARRAY que pour la sortie de la procédure. Pouvez-vous svp m'aider dans la mise en œuvre de la logique de lire le NUM_ARRAY dans mon code java. Normalement, la sortie est renvoyée à l'aide de la Carte = super.execute(inParams); Comment puis-je maintenant extraire le NUM_ARRAY à mon haricot?

The source code implementation is as follows.
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.sql.DataSource;
import oracle.jdbc.OracleTypes;
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
import org.apache.log4j.Logger;
import org.springframework.jdbc.core.SqlOutParameter;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.SqlTypeValue;
import org.springframework.jdbc.object.StoredProcedure;
public class RevPrdBrkDwnSP extends StoredProcedure{
private final Logger log = Logger.getLogger(this.getClass().getName());
public RevPrdBrkDwnSP(DataSource dataSource, String storeProcName) {
//Run the Parent
super(dataSource, storeProcName);
//Declare the Parameter Details
declareParameter(new SqlParameter("IN_ARRAY", OracleTypes.ARRAY, "****.PROD_PRCT_BRKDWN_TYPE_ARRAY"));
declareParameter(new SqlOutParameter("OUT_ARRAY", OracleTypes.ARRAY, "****.PROD_PRCT_BRKDWN_TYPE_ARRAY"));
//Compile the SP
compile();
}
public boolean execute(final RevAppViewBean appViewBean$Session, final DataSource dataSource) throws Exception {
boolean returnVal = false;
Map<String, Object> inParams = new HashMap<String, Object>();
log.info("Setting up the Store Procedure Params");
inParams.put("IN_ARRAY", new SqlTypeValue() {
public void setTypeValue(PreparedStatement cs, int index, int sqlType, String typeName) throws SQLException {
Connection con = cs.getConnection();
ArrayDescriptor des = ArrayDescriptor.createDescriptor("****.PROD_PRCT_BRKDWN_TYPE_ARRAY", con);
ARRAY a = new ARRAY(des, con, appViewBean$Session.getExcelRecLst().toArray());
cs.setObject(1, (Object)a);
}
});
inParams.put("OUT_ARRAY", identifier); //what should the identifier be ?????????
if (log.isDebugEnabled()) {
log.debug("Executing the **** Store Procedure ");
}
Map out = super.execute(inParams); //how to get the same array as value ?????? 
log.info("output size is --------------------->>>>>>>>>> "+out.size());
for(Object o : out.keySet()){
log.info((String)out.get(o));
returnVal = Boolean.parseBoolean((String)out.get(o));
}
if (log.isDebugEnabled()) {
log.info("Output from **** Store Procedure :" + out);
}
return returnVal;
}
}

Mise à jour:
Après l'utilisation du Ressort des Données JDBC Extension, le code source a dû être modifié pour accueillir la nouvelle réponse qui est collé ci-dessous, mais le problème de connexion existe encore lorsque le bean.getAttributes() la méthode est appelée. Ressemble à un moyen doit être trouvé pour ne pas fermer la connexion ou de l'accès aux valeurs avant que la connexion se ferme.

Map out = super.execute(inParams);
log.info("output size is --------------------->>>>>>>>>> "+out.size()); //prints the actual value
Object[] idOutArraz = (Object[])out.get("OUT_ARRAY");
log.info("size of returnValue is "+idOutArraz.length); //prints the right number of results
for(int i= 0; i<idOutArraz.length;i++){
Object[] attrs = null;
Struct bean = (Struct) idOutArraz[i];
attrs = bean.getAttributes();
if (attrs != null) {
System.out.println(Arrays.asList(attrs));
}
} 

OriginalL'auteur sandy | 2013-06-05