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

JDBC Java Discussion :

[JDBC][10g]Impossible de changer la date


Sujet :

JDBC Java

  1. #1
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut [JDBC][10g]Impossible de changer la date
    Bonjour tout le monde.

    J'essaie de mettre à jour une date de modification d'un enregistrement dans ma BD Oracle, via un PreparedStatement, mais ça me renvoie systématiquement une erreur: ORA-01008:not all variables bound.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
                java.sql.Date currentDate = new java.sql.Date(System.currentTimeMillis());
     
                String sqlCmd = "UPDATE maincatalog SET modification_date = ?, status = 1, description = '"+this.getDescription()+"' "
                + "WHERE obj_id = "+this.getId();
     
                stmt = conn.prepareStatement(sqlCmd);
     
                int cnt = 1;
                stmt.setDate(cnt++, currentDate);
     
                stmt.executeUpdate(sqlCmd);
    Est-ce que quelqu'un aurait une idée ?

    Cordialement.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  2. #2
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Vraiment au pif ... il n'y aurait pas un ? dans la description ??

    D'ailleurs pourquoi ne pas passer les autres valeurs en tant que ?
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  3. #3
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    Citation Envoyé par in Voir le message
    Vraiment au pif ... il n'y aurait pas un ? dans la description ??
    Non. J'ai un / en revanche dedans, mais je ne pense pas que ce soit un problème.

    Citation Envoyé par in Voir le message
    D'ailleurs pourquoi ne pas passer les autres valeurs en tant que ?
    Pour pouvoir afficher ma requête avant de l'éxécuter.

    Je n'ai plus le problème si je ne mets pas la date, je l'ai à nouveau si j'essaie de mettre un CLOB à jour via le '?' dans la même requête.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  4. #4
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Heu pour ta date, si c'est vraiment l'heure courante que tu veux, pourquoi ne pas faire un SYSDATE (ou le truc qui va bien avec ta base) ?

    sinon pour le clob :

    La plus simple mais pas la plus perfomante est d'insérer un clob vide, de faire un getClob dessus pour le récupérer et d'ensuite le mettre à jour. C'est ce que tu trouve les plus comme technique sur le net ...

    Sinon, dernièrement dans un projet avec Oracle, j'ai fait comme ça (je dis pas que c'est le mieux mais ça marche en tous cas ... )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            CLOB c = null; // ici c'est directement l'object dispo dan ojdbc14.jar
        	try {
    		c = getCLOB(message.getDescription()); // le paramètre est un string
    	} catch (Exception e) {
    		throw new ConnectionDBException(e);
    	}
     
        	try {
        		// ...
        		req.setObject(6, c); // en fait j'utilise le setObject
                    // ...
    et

    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
     /*
         * This method creates CLOB object using temporary clob and returns the same.
         */
          private CLOB getCLOB( String clobData )
                          throws Exception {
            CLOB tempClob = null;
     
            try {
              //  create a new temporary CLOB
              tempClob = CLOB.createTemporary( req.getConnection(), true, CLOB.DURATION_SESSION );
     
              // Open the temporary CLOB in readwrite mode to enable writing
              tempClob.open( CLOB.MODE_READWRITE );
     
              // Get the output stream to write
     
              Writer tempClobWriter = tempClob.getCharacterOutputStream( );
     
              // Write the data into the temporary CLOB
              tempClobWriter.write( clobData );
     
              // Flush and close the stream
              tempClobWriter.flush(  );
              tempClobWriter.close(  );
     
              // Close the temporary CLOB
              tempClob.close(  );
     
            } catch ( Exception e) {
                tempClob.freeTemporary();
               throw new ConnectionDBException(e);
            }
            return tempClob;
          }
    Si ça peux t'aider ...

    PS : si tu utilises Oracle 11 je crois que c'est beaucoup plus facile d'insérer un clob directement avec setClob et un stream ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  5. #5
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    J'utilise malheureusement Java 1.4 avec Oracle 10g. C'eut été tellement simple avec Java 6.
    Bref voici ce que j'ai utilisé, (ce que tu dis en fait).

    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
    // Create the CLOB in the database (or reset it)
                stmt = conn.createStatement();
                stmt.execute("UPDATE maincatalog SET clobColumn=empty_clob() WHERE obj_id = " + this.getId());
     
                // Then retrieve its instance
                String sqlQuery = "SELECT clobColumn FROM maincatalog WHERE obj_id = " + this.getId();
                ResultSet clobRs = stmt.executeQuery(sqlQuery);
                // Only one loop since the select filters on the obj_id.
                while (clobRs.next())
                {
                    // Get the lobs
                    CLOB textStringClob = ((OracleResultSet) clobRs).getCLOB("clobColumn");
                    // and populate it
                    DataBaseUtil.fillClob(textStringClob, myClobValue.toString());
                }
                clobRs.close();
    et mon fillClob():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static void fillClob (CLOB clob, String buff) throws SQLException, IOException
       {
           Writer outstream = clob.getCharacterOutputStream();
     
           outstream.write(buff,0,buff.length());
           outstream.close();
       }
    Pour la date, j'essaie dessuite et je te tiens au courant.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  6. #6
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    il fût aussi possible que tu utilisasses ma solution avec java 1.5. Pour un gros paquet d'insert, faudrait tester pour voir ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  7. #7
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    Comment dire... évidement ça marche !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String sqlCmd = "UPDATE maincatalog SET modification_date = SYSDATE, status = 1, description = '" + this.getDescription() + "' " + "WHERE obj_id = "
                        + this.getId();
    Merci beacoup.
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

  8. #8
    Membre éprouvé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Points : 1 253
    Points
    1 253
    Par défaut
    Citation Envoyé par in Voir le message
    il fût aussi possible que tu utilisasses ma solution avec java 1.5. Pour un gros paquet d'insert, faudrait tester pour voir ...
    Certes, mais c'est un prérequis client que d'utiliser la version Java 1.4, d'où mon désarois.

    Cela dit, le code que j'ai donné pour l'écriture de mon CLOB semble ne pas marcher. Quand j'essaie de le lire, j'ai toujours un CLOB vide. Ce qui me désappointe un brin. J'ouvre un autre topic au sujet plus explicite !
    Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !

    Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter !

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

Discussions similaires

  1. impossible d'insérer une date dans la base
    Par bobic dans le forum ASP
    Réponses: 3
    Dernier message: 03/10/2005, 12h29
  2. Impossible de changer Visible dans OnHide ou OnShow
    Par marsupilami34 dans le forum Composants VCL
    Réponses: 10
    Dernier message: 21/06/2005, 14h24
  3. impossible de changer la valeur d'un hidden...
    Par Palmic dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 31/05/2005, 13h06
  4. [jdbc] connexion impossible à sql server
    Par hari dans le forum Eclipse Java
    Réponses: 9
    Dernier message: 01/04/2005, 19h27
  5. [JDBC][MS ACCESS] probleme insertion de date
    Par darius_the_first dans le forum JDBC
    Réponses: 2
    Dernier message: 10/12/2004, 19h04

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