2010-11-24 6 views
4

Mein Code ist die oben genannte Ausnahme in der folgenden Zeile (Zeile 2 dieses) zu werfen:Wie kann ich diese Ausnahme verhindern? java.sql.SQLException: fail auf interne Darstellung konvertieren:

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

Sein gibt mir die folgende Ausnahme:

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

die myObjects ist ein Arraylist der folgenden POJO:

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

    private int age; 

    ... 

    // Accessors etc.. 

} 

die T_PARAM_ARRAY auf der Datenbank sieht wie folgt aus:

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

Nach einigen Recherchen, glaube ich richtig, dass die Datentypzuordnung zwischen meinem POJO und dem Datenbanktyp nicht übereinstimmen. Ich bin ziemlich sicher, dass String auf VARCHAR2 passt, ok, aber ich denke, dass es ein Problem gibt, das die int in eine NUMBER konvertiert.

Ich habe versucht mit BigDecimal, aber das hat die Situation nicht verbessert.

Irgendwelche Vorschläge?

EDIT: Nach der 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.

Antwort