Bonjour tout le monde,
j'utilise l'API Jexcelapi pour générer des fichiers à partir de donnée oracle.
J'ai créé cette classe:
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package jxl.oracle;
import java.io.File;
import java.util.Date;
import java.util.Locale;
import jxl.Workbook;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import jxl.write.DateTime;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.Label;
import jxl.write.WritableWorkbook;
import java.lang.Integer;
import jxl.write.Number;
import java.lang.Double;
import jxl.write.DateFormat;
import oracle.jdbc.OracleDriver;
 
public class write 
{
  public static void main(String[] args) 
  {
    Connection con = null;
    String sstatement;
    int i;
    String colname;
    try
    {
      Date date_actuelle = new Date();
      System.out.println("Debut:" + date_actuelle);
      /*standalone xls creation*/
      DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver ());
      con = DriverManager.getConnection("jdbc:oracle:oci:@xxx.xxx.xxx.xxx:xx:ORCL", "TATA", "TOTO");
      WritableWorkbook copy=Workbook.createWorkbook(new File("c:/test.xls"));
      */
      /* inside data base*/
      /*OracleDriver ora = new OracleDriver();
      con = ora.defaultConnection();
      WritableWorkbook copy=Workbook.createWorkbook(new File("/oradata/test.xls"));
      */
      WritableSheet sheet = copy.createSheet("First Sheet", 0);
      i = 0;
      Statement stmt = con.createStatement();
      sstatement = "select * from tagada'";
      ResultSet rs = stmt.executeQuery(sstatement);
      int nbcol = rs.getMetaData().getColumnCount();
      int j = 1;
      while (j<=nbcol)
      {
        colname=rs.getMetaData().getColumnName(j);
        Label labeldata = new Label(j-1, i, colname);
        sheet.addCell(labeldata);
        j=j+1;
      }
      j=1;
      i=1;
      WritableCellFormat myformat = new WritableCellFormat(new DateFormat("dd/MM/yyyy"));
      while (rs.next() && i<65535)
      {
        j=1;
        while (j<=nbcol)
        { 
          String coltype = rs.getMetaData().getColumnTypeName(j);
          if (rs.getMetaData().getColumnTypeName(j)=="INTEGER" ) 
          {
            int sdata = rs.getInt(j);
            if (!rs.wasNull())
            {
              Number labeldata = new Number(j-1, i, sdata);
              sheet.addCell(labeldata);
            }
          }
          if (rs.getMetaData().getColumnTypeName(j)=="NUMBER" ) 
          {
            double sdata = rs.getDouble(j);
            if (!rs.wasNull())
            {
              Number labeldata = new Number(j-1, i, sdata);
              sheet.addCell(labeldata);
            }
          }
          if (rs.getMetaData().getColumnTypeName(j)=="VARCHAR2" || rs.getMetaData().getColumnTypeName(j)=="CHAR")
          {
            String sdata = rs.getString(j);
            if (!rs.wasNull())
            {
              Label labeldata = new Label(j-1, i, sdata);
              sheet.addCell(labeldata);
            }
          }
          if (rs.getMetaData().getColumnTypeName(j)=="DATE")
          {
            Date sdata = rs.getDate(j);
            if (!rs.wasNull())
            {
              DateTime labeldata = new DateTime(j-1, i, sdata, myformat);
              sheet.addCell(labeldata);
            }
          }
          j = j+1;
        } 
        i = i+1;
      }
      copy.write();
      rs.close();
      con.close();
      copy.close();
      date_actuelle = new Date();
      System.out.println("Fin:" + date_actuelle);
    }
    catch(Exception ex)
    {
      ex.printStackTrace();
    }
  }
}
Cette classe fonctionne sans aucun problème lorsque je fais un run par le biais de JDEV mon fichier c:\test.xls est créé correctement.
Maintenant j'essaye d'en faire une java stored procedure sous une database 9iR2 (9.2.0.6) sous HPUX:
je mets donc cette partie de code en commentaire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
     /*standalone xls creation*/
      DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver ());
      con = DriverManager.getConnection("jdbc:oracle:oci:@xxx.xxx.xxx.xxx:xx:ORCL", "TATA", "TOTO");
      WritableWorkbook copy=Workbook.createWorkbook(new File("c:/test.xls"));
et j'enléve les commentaires pour cette partie de code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
      OracleDriver ora = new OracleDriver();
      con = ora.defaultConnection();
      WritableWorkbook copy=Workbook.createWorkbook(new File("/oradata/test.xls"));
j'ai créé un profile de déploiement pour la database, tous les objets sont chargé correctement et sont marqués comme valide.
je me suis créé une procedure PL/SQL ORA2XLS comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
PROCEDURE      ORA2XLS (p_args in varchar2) AS
LANGUAGE JAVA
NAME 'jxl.oracle.write.main(java.lang.String[])';
Lorsque j'execute ma procedure sous sql/plus voici le resultat:
SQL> execute ora2xls('blabl');
Debut:Wed Jan 10 16:03:23 CET 2007
java.lang.AbstractMethodError: Error detected by bytecode verifier when class was created
at jxl.write.biff.RowRecord.writeCells(RowRecord.java:275)
at jxl.write.biff.SheetWriter.write(SheetWriter.java:440)
at jxl.write.biff.WritableSheetImpl.write(WritableSheetImpl.java:1321)
at jxl.write.biff.WritableWorkbookImpl.write(WritableWorkbookImpl.java:839)
at jxl.oracle.write.main(write.java:109)
BEGIN ora2xls('blabl'); END;

*
ERREUR à la ligne 1 :
ORA-29532: appel Java arrêté par une exception Java non interceptée : java.lang.AbstractMethodError: Error detected by bytecode verifier when class was created
ORA-06512: à "ORA2XLS", ligne 0
ORA-06512: à ligne 1

Je n'arrive pas a comprendre pourquoi il me retourne cette erreur.
Donc si quelqu'un peut m'aider ca serait tres bien
Pour info j'ai testé sur une 10gR2 et ca passe sans probleme.