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

Servlets/JSP Java Discussion :

Servlet concaténation incrémenter


Sujet :

Servlets/JSP Java

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut Servlet concaténation incrémenter
    bonjour je besoin d'aide,j'aimerais bien savoir comment incrémenter un varchar, exemple je veux que le référence du bon de commande qui est écrit de cette manière (01BCAnnée) s'incrémente automatiquement(01BC2010,02BC2010,.....01BC2011)pour cela j'ai ajouté un autre table s'appelle commandesequence contenant seulement l'id integer exemple(01). le problème que j'ai maintenant c'est je ne sais pas comment faire pour sélectionner l'id depuis la table commandesequence et de l'insérer dans la table commande j'ai utilisé ce code :

    commandeClient.setReference(""+"BC"+Calendar.getInstance().get(Calendar.YEAR));
    merci infiniment

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 165
    Par défaut
    Salut,

    moi je gérerai ton id avec une séquence. Tu auras juste à faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select taSequence.nextval from dual
    et faire ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    commandeClient.setReference(numSequence+"BC"+Calendar.getInstance().get(Calendar.YEAR));

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut
    merci pour votre réponse voila le code que j'ai utilisé
    List<CommandeSequence> commandesequence = null;
    Query q = sessionDb.createQuery("from CommandeSequence Cs");
    commandesequence = q.list();
    request.setAttribute("commandesequence", commandesequence);
    //select commande_seq.nextval FROM dual*/
    //commandeClient.setReference(select concat(id.NEXTVAL(),"BC",DATE_FORMAT(SYSDATE,'%Y')) FROM dual);
    commandeClient.setReference(commandesequence+"BC"+Calendar.getInstance().get(Calendar.YEAR));
    et pour le nextval n'existe pas dans mysql j'ai tester ma requête
    select id.nextval from dual
    .

  4. #4
    Membre émérite Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Par défaut
    Bonjour

    tu devrais faire une recherche sur google car ta requête est une requête pour Oracle

    Je te conseille de poster ta demande dans le forum base de données et d'adapter ton code java en conséquence

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut
    Bonjour j'ai résolu la moitié du travail je peux récupérer le id de la table commandeSequence mais le problème que j'ai maintenant c'est que je veux le récupérer en l'incrémentation à chaque fois d'une nouvelle enregistrement d'une commande,voici le code que j'ai utilisé.

    CommandeSequence commandesequence = null;
    Query q = sessionDb.createQuery("from CommandeSequence Cs");

    commandesequence = (CommandeSequence) q.uniqueResult();

    commandeClient.setReference("0"+commandesequence.getId() +"BC"+Calendar.getInstance().get(Calendar.YEAR));

  6. #6
    Membre émérite Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Par défaut
    Est-ce que ton champs id commande est en auto-increment sur ta table?
    Si tu ne sais pas est-ce que tu peux poster le schéma de table ou le script SQL de création ?

  7. #7
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut
    merci pour votre réponse oui est en auto-increment sur ma table commandesequence.

  8. #8
    Membre émérite Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Par défaut
    Est-ce que tu as essayé de faire un insert dans ta table de sequence et de récuperer ta derniere valeur insérée qui est en retour de ton insert

    Tu peux le faire en JDBC avec l'algo suivant
    1) récupérer une connexion à la BDD,créer un statement
    2) exécuter la requête SQL suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    INSERT INTO commandesequence  (id) VALUES (NULL);
    3) tu récupères la valeur de l'id en utilisant ton statement

    hhttp://download.oracle.com/javase/6/...Statement.html

    et tu fais

    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
    ResultSet rs = null;
            try {
                rs = statement.getGeneratedKeys();
                
                 if (rs.next()) {
                     index = rs.getInt(1); 
                 }
                 else {
                     throw new Exception();
                 }
                
                 rs.close();
                 rs = null;
               
            }
    finally{
    //ici bien sûr tu fermes  ton statement etc ....
    }
    pour utiliser JDBC il y a la FAQ JDBC qui peut t'aider sur ce forum.

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut
    Merci pour votre réponse mais je ne peut pas utilisé jdbc j'ai utilisé ce code

    CommandeSequence commandesequence = null;

    Query q = sessionDb.createQuery("from CommandeSequence Cs");

    commandesequence = (CommandeSequence) q.uniqueResult();
    commandesequence.incrementId();
    commandeClient.setReference("0"+commandesequence.getId() +"BC"+Calendar.getInstance().get(Calendar.YEAR));
    mais j'ai une erreur le voici:

    org.hibernate.HibernateException: identifier of an instance of domain.CommandeSequence was altered from 1 to 2
    org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:58)
    org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:157)
    org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:113)
    org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:196)
    org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:76)
    org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
    org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
    servlets.commande.Commande.doPost(Commande.java:351)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    merci infiniment

  10. #10
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut
    J'ai fais quelques modification dans la Base de Donnée j'ai pas mis l'id autoincrement et pour classe commande sequence j'ai mis ce code:

    package domain;

    public class CommandeSequence {
    public Integer id;

    public Integer getId() {
    return id;
    }

    public void setId(Integer id) {
    this.id = id;

    }

    public Integer getincrementId() {
    return (id=id+1);

    }
    }
    et pour la servlet commande:
    CommandeSequence commandesequence = null;

    Integer idIncrement = null;

    Query q = sessionDb.createQuery("from CommandeSequence Cs");

    commandesequence = (CommandeSequence) q.uniqueResult();


    idIncrement = commandesequence.getincrementId();

    commandeClient.setReference("0"+idIncrement+"BC"+Calendar.getInstance().get(Calendar.YEAR));
    le problème que j'ai maintenant que l'id s'incremente pas il retourne toujours 2 parce que dans la Base de Donnée est 1 merci pur vos aides

  11. #11
    Membre émérite Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Par défaut
    Citation Envoyé par salma309 Voir le message
    J'ai fais quelques modification dans la Base de Donnée j'ai pas mis l'id autoincrement
    Bonjour

    juste une question , pourquoi est-ce que vous avez supprimé l'auto-increment ?

  12. #12
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 114
    Par défaut
    je ne pense pas c'est important de mettre l'id auto increment

  13. #13
    Membre émérite Avatar de noOneIsInnocent
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 037
    Par défaut
    Je pense que tu devrais rester sur ton idée initiale avec une table commandesequence. Tu insères une nouvelle ligne dans cette table en utilisant du HQL si tu ne veux pas utiliser du JDBC et tu récupères ton identifiant.
    Il te reste à mettre à jour ta commande
    Il faudra que tu configures ton fichier hibernate.xml pour déclarer ta table commandesequence
    pour l'implémentation à toi de le faire ça ne doit pas être si compliqué

Discussions similaires

  1. concaténer & incrémenter une variable objet
    Par shewy80 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 24/10/2014, 12h10
  2. Requete concaténé incrémentée
    Par piero53 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 12/11/2009, 17h14
  3. Concaténation de String et Integer
    Par Ingham dans le forum Langage
    Réponses: 5
    Dernier message: 21/01/2003, 17h26
  4. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10
  5. Post incrémentation?
    Par Defrag dans le forum C
    Réponses: 4
    Dernier message: 08/10/2002, 10h36

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