IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

jexcelapi stocké dans la base


Sujet :

Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 3
    Points
    3
    Par défaut jexcelapi stocké dans la base
    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.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 349
    Points : 409
    Points
    409
    Par défaut
    à tout hazard ...
    J'ai eu un jour lors du développement d'un PJC un pb à peu prés similaire. Sous JDEV et sous DOS, ce composant fonctionnait correctement mais sous Forms, il plantait sans que je puisse capter une exception .

    Le problème était que j'appellais la méthode indexOF de la classe StringBuffer à partir de JDEV ou DOS (VM 1.4.2) alors que Jinitiator à l'époque, utilisait la VM 1.3.1 et cette méthode n'existait pas d'où le problème ...

    Il n'est pas impossible que Jexcelapi utilise une méthode incompatible avec certaines VM.

    dans les différents environnements 9i et 10g

    CDLT.

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Oui ca doit etre un truc comme ca mais je ne sais pas comment verifier la java version à l'interieur de la base 9iR2.
    Pour Jdev c'est:
    C:\ORA10IDS\jdev\bin>java -version
    java version "1.4.2_04"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_04-b05)
    Java HotSpot(TM) Client VM (build 1.4.2_04-b05, mixed mode)

    C'est pourquoi je choisi -target 1.3 pour la compile puisqu'il me semble que c'est une version 1.3.1 dans la base.
    Je continue a chercher j'ai réussi à isolé une class specifique qui a "l'air" d'etre la cause:
    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
     
    /*********************************************************************
    *
    *      Copyright (C) 2002 Andrew Khan
    *
    * This library is free software; you can redistribute it and/or
    * modify it under the terms of the GNU Lesser General Public
    * License as published by the Free Software Foundation; either
    * version 2.1 of the License, or (at your option) any later version.
    *
    * This library is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    * Lesser General Public License for more details.
    *
    * You should have received a copy of the GNU Lesser General Public
    * License along with this library; if not, write to the Free Software
    * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    ***************************************************************************/
     
    package jxl;
     
    /**
     * An enumeration type listing the available content types for a cell
     */
    public  final class CellType
    {
     
      /**
       * The text description of this cell type
       */
      private String description;
     
      /**
       * Private constructor
       * @param desc the description of this type
       */
      private CellType(String desc)
      {
        description = desc;
      }
     
      /**
       * Returns a string description of this cell
       *
       * @return the string description for this type
       */
      public String toString()
      {
        return description;
      }
     
      /**
       */
      public static final CellType NUMBER          = new CellType("Number");
     
      public static final CellType EMPTY           = new CellType("Empty");
      /**
       */
      public static final CellType LABEL           = new CellType("Label");
      /**
       */
      /**
       */
      public static final CellType BOOLEAN         = new CellType("Boolean");
      /**
       */
      public static final CellType ERROR           = new CellType("Error");
      /**
       */
      public static final CellType NUMBER_FORMULA  =  new CellType("Numerical Formula");
      /**
       */
      public static final CellType DATE_FORMULA  = new CellType("Date Formula");
      /**
       */
      public static final CellType STRING_FORMULA  = new CellType("String Formula");
      /**
       */
      public static final CellType BOOLEAN_FORMULA = new CellType("Boolean Formula");
      /**
       */
      public static final CellType FORMULA_ERROR   = new CellType("Formula Error");
      /**
       */
      public static final CellType DATE            = new CellType("Date");
    }
    Ensuite c'est quand j'essaye de determiner si ma cellule x est du type CellType.NUMBER qu'il me jette.
    Je continue.
    Merci encore.
    Apres execution de ma procedure PL/SQL la vue USER_ERRORS contient l'erreur suivante:
    ORA-29552: avertissement de vérification : at offset 42 of jxl.write.biff.RowRecord.writeCells invokevirtual refers to an interface
    verifier is replacing bytecode at jxl.write.biff.RowRecord.writeCells:42 by a throw
    at offset 157 of jxl.write.biff.RowRecord.writeCells invokevirtual refers to an interface
    verifier is replacing bytecode at jxl.write.biff.RowRecord.writeCells:157 by a throw
    at offset 177 of jxl.write.biff.RowRecord.writeCells invokevirtual refers to an interface
    verifier is replacing bytecode at jxl.write.biff.RowRecord.writeCells:177 by a throw

  4. #4
    Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    C'etait bien une histoire de compilation:
    Il faut choisir target 1.1 dans les options de compilations et les class s'executent correctement. Par contre les difference de performance sont impressionantes entre une base 9i et une 10g: presque 10x plus lent en base 9i que 10g.
    En executant directement de Jdev ou en dos je traite environ 1Millions de cellules en 1 minutes sur la base 10g j'ai a peu prés les memes perf par contre
    en 9i c'est 800000 cellule en 8 minutes .....
    Voila.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Afficher une image stockée dans une base de données
    Par LuckySoft dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/04/2006, 12h57
  2. Contenu fichier stocké dans une base de données
    Par t_om84 dans le forum Général Python
    Réponses: 20
    Dernier message: 02/03/2006, 11h45
  3. [PostgreSQL] [PostGreSQL] Ouverture d'une image stockée dans la base
    Par passie dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 31/01/2006, 15h00
  4. [MySQL] Nom de l'image stocké dans la base de donnée
    Par ToxiZz dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 07/01/2006, 16h54
  5. images stockées dans la base ou non
    Par Guigui_ dans le forum Bases de données
    Réponses: 5
    Dernier message: 18/01/2005, 12h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo