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

Java Discussion :

Insert where not exists


Sujet :

Java

  1. #1
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Par défaut Insert where not exists
    Bonjour
    j'ai un problème que j'essaie de le résoudre depuis 3 jours mais aucun changement
    j'ai posté ce dernier dans le forums du jdbc mais ils m'ont dit que ton problème au niveau du Java
    Bon, ce que je veux faire c'est une requette INSERT WHERE NOT Exists car lors de chaque exécution du programme les mêmes données se répétent dans la table alors il y a des répétitions
    j'ai un array où je stock les données d'une classe d'objets, et vie ce tableau je fait le INSERT dans la table sql

    Voilà la requette:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    stmt = conn.createStatement();
     stmt.executeUpdate("INSERT INTO tout\n" +
    "SELECT DISTINCT '"+srv.getvlan()+"','"+srv.getdesc()+"','"+srv.getjr()+"','"+srv.getvrf()+"','"+srv.getaddress()+"' \n" +
    "FROM dual\n" +
    "WHERE NOT EXISTS (SELECT * FROM tout WHERE `VLAN` = '"+srv.getvlan()+"' )");
    et voilà l'erreur j'essayais pas mal de fois avec plusieurs manières mais rie n'est changé.
    java.sql.SQLException: Column count doesn't match value count at row 1
    VLAN est la première colonne du table pas le PK.
    la table contient 5 champs
    Merci d'avance

  2. #2
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    C'est bien un probleme SQL, pas java.
    Mais peu importe, 3 remarques :
    - L'exception indique clairement que le nombre de colonnes n'est pas le meme entre la table "tout" et le resultat de la requete (5 colonnes). Donc soit ta table tout n'a pas 5 colonnes, soit un des champs parametres contient un texte qui change le nombre de parametre (par exemple koko', 'momo)
    - Ta requete utilise une table dual qui ne sert a rien. Autant faire plutot un truc comme ca : "SELECT DISTINCT champ1, champ2 WHERE NOT EXISTS (SELECT * FROM tout WHERE `VLAN` = '"+srv.getvlan()+"' )"
    - Il vaut mieux utiliser des PreparedStatement pour eviter l'insertion SQL ou bien des bugs à cause de caracteres utilisés par SQL

  3. #3
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Par défaut
    Oui j'ai d'autres colonnes mais dans cette requette je veux juste ajouter ces champs là
    Mais voilà j'ai changé la requette mais où dois je ajouter les autres champs qui restent si je fais comme çà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    stmt.executeUpdate("INSERT INTO tout\n" +
    "SELECT DISTINCT '"+srv.getvlan()+"' WHERE NOT EXISTS (SELECT * FROM tout WHERE `VLAN` = '"+srv.getvlan()+"' )");
    srv.desc
    srv.jr
    srv.address

  4. #4
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Par défaut
    et pour le preparedstatement je l'utilise dans toutes mes requette just là çà pas marcher j'avais fait au début çà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    PreparedStatement pst=conn.prepareStatement(
            "INSERT INTO tout (VLAN,client,JR,vrf,address) "
        + "SELECT DISTINCT '"+srv.getvlan()+"', ?, ?, ?, ? "  
        + "   FROM dual "
        + "   WHERE NOT EXISTS (SELECT * FROM tout WHERE 'VLAN'='"+srv.getvlan()+"')"
        + " ");
            pst.setString(1,convertNullToEmptyString(srv.getdesc()));
    	pst.setString(2,convertNullToEmptyString(srv.getjr()));
    	pst.setString(3,convertNullToEmptyString(srv.getvrf()));
    	pst.setString(4,convertNullToEmptyString(srv.getaddress()));
    	pst.executeUpdate();

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Tu as à la fois du problème de Java, et du problème de SQL.

    Ça ne va pas. Tu dois d'abord trouver la bonne requête SQL, et ensuite seulement chercher comment la faire en Java.

    Donc tu dois commencer par faire du code SQL, et pas la moindre trace de Java.
    (Au passage, tu n'as rien posté du tout sans le sous-forum JDBC, qui était pourtant assez bien pour ça.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Problème requête insert where not exists
    Par cisco.nat dans le forum Langage SQL
    Réponses: 30
    Dernier message: 01/07/2013, 13h14
  2. Insert where not exists from array<Class.java>
    Par cisco.nat dans le forum Langage SQL
    Réponses: 4
    Dernier message: 24/06/2013, 23h42
  3. [MySQL-5.5] comment faire un insert en bloc where not exists
    Par Motti2 dans le forum Requêtes
    Réponses: 0
    Dernier message: 26/05/2013, 13h42
  4. REQUETE INSERT WHERE NOT EXISTS
    Par tidou95220 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/03/2012, 13h35
  5. Insert .. where not exists
    Par Zolex dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 02/03/2007, 11h26

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