2010-11-24 15 views
4

Mon code jette l'exception ci-dessus sur la ligne suivante (ligne 2 du présent):Comment puis-je empêcher cette exception? java.sql.SQLException: Échec de la conversion à la représentation interne:

final ArrayDescriptor tParamArrayDescriptor = ArrayDescriptor.createDescriptor("MY_SYSTEM.T_PARAM_ARRAY", databaseHandler.getConnection()); 
final ARRAY oracleArray = new ARRAY(tParamArrayDescriptor, databaseHandler.getConnection(), myObjects.toArray()); 

Sa me donner l'exception suivante:

java.sql.SQLException: Fail to convert to internal representation: 

le myObjects est une liste de tableaux de la POJO suivante:

public class MyObject 
{ 
    private String name; 
    private String surname; 

    private int age; 

    ... 

    // Accessors etc.. 

} 

le T_PARAM_ARRAY sur la base de données se présente comme suit:

create or replace 
TYPE    T_PARAM_ARRAY AS OBJECT (NAME VARCHAR2(50), SURNAME VARCHAR2(50), AGE NUMBER(1)); 

Après quelques recherches, je crois que le mappage de type de données entre mon POJO et le type de base de données ne correspondent pas correctement. Je suis raisonnablement confiant que String correspond à VARCHAR2 ok, mais je pense qu'il y a un problème à convertir le int en NUMBER.

J'ai essayé d'utiliser BigDecimal, mais cela n'a pas amélioré la situation.

Des suggestions?

EDIT: D'après le Oracle documentation: Where intArray is an oracle.sql.ARRAY, corresponding to a VARRAY of type NUMBER. The values array contains an array of elements of type java.math.BigDecimal, because the SQL NUMBER datatype maps to Java BigDecimal by default, according to the Oracle JDBC drivers.

Répondre

Questions connexes