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 :

Statement.executeUpdate( requete; requete; requete;)


Sujet :

JDBC Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 5
    Par défaut Statement.executeUpdate( requete; requete; requete;)
    Salut à tous !

    Je m'explique .. Je passe une requête de type INSERT par mon statement en JSP, donc qui me renvoie un int, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int lignes_affectées = statement.executeUpdate("INSERT INTO matable
     (nom,prenom,age) VALUES ('dudu', 'maurice', 22);");
    lignes_affectées renvoie 1 !

    Bon, jusque là, facile me direz-vous

    Là où ça pose problème, c'est lorque je dois ajouter plusieurs requetes d'un coup .. (sinon ma classe ouvre/ferme/ouvre/ferme ma BDD o_O)

    en gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Vector lesNoms;
    for(i=0; i<lesNom.size();i++){
       requete = requete + "INSERT INTO maTable (nom) VALUES (' " 
    + lesNoms.get(i) + "');
    }
    int lignes_affectées = statement.executeUpdate(requete);
    donc ici requete = "INSERT INTO maTable (nom) VALUES ('roger');INSERT INTO maTable (nom) VALUES ('pierre');INSERT INTO maTable (nom) VALUES ('bob');"

    Quand je teste en copiant collant toutes mes requetes dans n'importe quel SGBD, cela fonctionne à merveille... par contre là pas moyen, il me renvoie systématiquement 0, et il ne fait rien ...


    Une petite idée ?

  2. #2
    Membre émérite
    Avatar de yolepro
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mai 2002
    Messages : 918
    Par défaut
    Disons que ta manière de procéder n'est pas très ... "catolique"

    Pourquoi ne pas réutiliser executeUpdate à chaque nouvel insere que tu souhaites faire?

    Sache que derriere le executeUpdate se cache un systeme de commit / rollback, ce qui peut expliquer qu'il ne veuillez executer q'un seul update a la fois.

    Dans tout les cas tu y gagneras en clareté et donc en maintenabilité.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 5
    Par défaut
    En fait, pour être un peu plus précis, je comptais tout d'abord faire une classe contenant en attribut tous les paramêtres necessaires à la connexion, avec une méthode ouvrirJDBC() et fermerJDBC().

    De là, le chef est passé et m'a dit "oulaaah, avec une architecture client serveur, il ne faut surtout pas passer par là ! Il vaut mieu que l'ouverture/fermeture se fasse dans la même METHODE et non pas au travers de la vie de la classe"

    Alors que moi je l'apl par un useBean, avec le scope "request" qui va bien ..

    Je pense que tu comprend mieu mon desarrois ! Faire une boucle contenant à l'intérieur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int lignes_affectées = statement.executeUpdate(requete);
    out.println(lignes_affectées);
    me choque !! A cause du trop grand nombre de connexion/déconnexion ..


    Après maintes recherches sur le net, il apparait que la solution serait d'exploiter le pool de connection JDBC de TomCat .. Hélas je captge rien au Servlet enfin je vois comment créer les fichier web.xml, server.xml, mais pas comment m'en servir par la suite ??!??!?

    Car son rôle apparemment serait de gérer lui meme les flux avec la BDD, SANS la fermer et l'ouvrir à tout bout de champ comme je fais ...


    En tout cas merci pour ton aide yolepro .. et si qq'un s'y connais en POOL ..

    SALUT !

  4. #4
    in
    in est déconnecté
    Membre Expert 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
    Par défaut
    je crois que tu peux aussi essayer avec un "batch" ou "updateBatch" qui permet d'exécuter à la suite plusieurs requetes.

    Seul hic, je suis peut etre en train de dire une betise car je ne trouve pas dans la javadoc, pourtant je suis sûr d'avoir vu ça dans un de mes projets en cours (mais je n'arrive pas non plus à retrouver ce truc)

    Si quelqu'un sait de quoi je parle Ca me ferait plaisir de savoir que je ne pars pas en vrille ...

    [EDIT] Youpi, je ne suis pas fou. c'est dans la classe statement. En espérant que ça puisse t'être utile ...

Discussions similaires

  1. [Requête] La requête retourne trop de résultat
    Par Lycoz dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 28/09/2006, 14h13
  2. requete VBA = requete déjà créer dans l'interface access
    Par jeje22 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 15/09/2006, 15h43
  3. Faire une requete de requete en SQL <= pb avec analyse croisée
    Par capitaine dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 28/08/2006, 16h13
  4. requete QBE / requete code : rapidité et index
    Par LostIN dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 05/07/2006, 08h54
  5. [Access 97] plusieurs sous requetes dans requetes!!!
    Par T'chab dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/05/2006, 14h07

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