Bonjours,

J'essaie de recurer un type object dans un resultset mais je ne vois pas mon erreur. J'ai pourtant bien suivit la documentation :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
 
-- En Oracle
Create or replace type type_f1 as object (  member_1 varchar2(10 ) ) ;
Type created.
 
 
SQL> create table tbl_typ_f1 ( col1 type_f1 );
Table created.
 
SQL> insert into tbl_typ_f1 values (type_f1('AAAAA') );
 
1 row created.
SQL> commit ;
 
Commit complete.
 
 
-- en Java 
Package dbaj
 
public class t2 {
    private  Object ft2 ;        // mon unique member    
    public Object getFt2() { return ft2 ; }   // ma classe d'access get
    public t2(Object o) {
      ft2=o;
    }
    }
 
 
-- Dans une autre source on veut selectionner la colonne 
.
.
.
         String  sql="select col1 from tbl_typ_f1" ;
        Statement stmt =  conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);   // Conn == Connection
        java.util.Map myMap = conn.getTypeMap();
        myMap.put("SYS.TYPE_F1",Class.forName("dbaj.t2"));
       conn.setTypeMap(myMap);
        ResultSet rset = stmt.executeQuery(sql);
 
 
        String s;
        while (rset.next()){
             t2 tt= (t2)rset.getObject(1);
             s=tt.getFt2().toString();
             System.out.println("s="+s);
        }
Et j'herite de :


java.sql.SQLException: Inconsistent java and sql object types: InstantiationException: dbaj.t2
at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)



si je remplace

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
 
  t2 tt= (t2)rset.getObject(1);
 
--par
 
   t2 tt= (t2)rset.getObject(1,myMap);
C'est le meme message d'erreur. La j'avoue que j'ai cherché mais je ne vois pas. Ce qui est ralant c'est que je vois le string 'AAAAA' dans le debugger mais il apparait ["",'AAAAAA']. Un get metadata.typename retourne SYS.TYPE_F1. Alors pourquoi ne puis-je mapper un object Oracle a un object Java ?