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 :

Insertion ligne dans base PostgreSQL


Sujet :

JDBC Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Insertion ligne dans base PostgreSQL
    Bonjour, je rencontre le problème suivant :
    J'ai une base de données PostgreSQL parfaitement fonctionnelle. Il s'agit d'une base de disques qui a pour clé primaire listing_id, de type INTEGER.
    Dans mon programme de gestion en JAVA, il est possible de remplir un formulaire, puis d'insérer les nouvelles données dans la base. Or cela ne fonctionne pas pour la clé primaire (que je ne renseigne pas dans le formulaire, le programme la calcule), qui dans le programme JAVA est de type int. Je suis certain que c'est un petit détail tout bête, mais je bloque dessus.
    Voici le code concerné :
    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
    		Statement state = conn.createStatement();
    		ResultSet rs = state.executeQuery("select count(*) from disques");
    		//String queryTest="insert into disques (listing_id, artist, title, label) values (999, 'Genesis', 'Foxtrot', 'indé')"; Test d'insertion avec ID prédéfini, fonctionne
    		//state.executeQuery(queryTest);
    		//ResultSet rs = state.executeQuery(queryTest);
    		rs.next();
    	        int count = rs.getInt(1); //ici on obtient la dernière valeur de clé primaire, en l'occurrence 976, puisque la base comporte au départ 976 entrées
    	       //System.out.println(count + "  résultats trouvés.");
     
    		System.out.println("Count vaut : "+count);	// je vérifie, j'ai bien 976 comme résultat	    	
     
     
     
    	//System.out.println("Numéro d'ID : "+id);
    	//System.out.println("ID :"+count +" Artiste : "+champArtiste + " Titre : "+champTitre + " Label : "+champEditeur);
     
    	// test insertion
     
    	//stm.executeQuery(queryTest);
      // insertion des valeurs du formulaire
    	count++; //pour augmenter la valeur de la nouvelle clé primaire de 1, et obtenir donc 977, pas de problème à ce niveau
     
        int id = Integer.valueOf(count);
     
    	String queryInsertion="INSERT INTO disques (listing_id,artist, title, label) values ('Integer.valueOf(count)', 'champArtiste', 'champTitre', 'champEditeur')";
                        //alternative
      	//String queryInsertion="INSERT INTO disques (listing_id,artist, title, label) values ('count', 'champArtiste', 'champTitre', 'champEditeur')";	
    	Statement state2 = conn.createStatement();
      System.out.println("IDCount = "+count);
      state2.executeQuery(queryInsertion); //et c'est là que ça m... avec la clé primaire, que j'utilise count ou Integer.valueOf(count);
    Et le message d'erreur :
    ERREUR: syntaxe en entrée invalide pour le type integer : « Integer.valueOf(count) »
    HELP ! Quel type de données dois-je utiliser ? Merci pour vos réponses

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Soit vous faites tout bêtement une concatination, pas joli, c'est vrai.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    String queryInsertion="INSERT INTO disques (listing_id,artist, title, label) values (" + count + ", 'champArtiste', 'champTitre', 'champEditeur')";
    Soit avec un String formatage comme ça.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    String queryInsertion=String.format("INSERT INTO disques (listing_id,artist, title, label) values (%d, 'champArtiste', 'champTitre', 'champEditeur')", count);
    Mieux serait de utiliser l'objet d'un PreparedStatement, comme ça.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String queryInsertion="INSERT INTO disques (listing_id,artist, title, label) values (?, 'champArtiste', 'champTitre', 'champEditeur')";
    PreparedStatement ps=conn.preparedStatement(queryInsertion);
    ps.setInt(1, count);
    ps.executeUpdate();
    ps.close();
    conn.commit();  //si conn n'est pas configuré conn.setAutoCommit(true)

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Ca fonctionne
    Merci beaucoup pour ces précieuses indications, plus de message d'erreur et l'insertion se fait avec le bon numéro de clé primaire incrémenté, pas de manière très précise au niveau du contenu (problème avec getText(), mais ça je devrais parvenir à trouver la solution.
    Un grand merci en tout cas.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par tsuji Voir le message
    Soit vous faites tout bêtement une concatination, pas joli, c'est vrai.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    String queryInsertion="INSERT INTO disques (listing_id,artist, title, label) values (" + count + ", 'champArtiste', 'champTitre', 'champEditeur')";
    Soit avec un String formatage comme ça.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    String queryInsertion=String.format("INSERT INTO disques (listing_id,artist, title, label) values (%d, 'champArtiste', 'champTitre', 'champEditeur')", count);
    Mieux serait de utiliser l'objet d'un PreparedStatement, comme ça.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String queryInsertion="INSERT INTO disques (listing_id,artist, title, label) values (?, 'champArtiste', 'champTitre', 'champEditeur')";
    PreparedStatement ps=conn.preparedStatement(queryInsertion);
    ps.setInt(1, count);
    ps.executeUpdate();
    ps.close();
    conn.commit();  //si conn n'est pas configuré conn.setAutoCommit(true)
    Merci beaucoup ! Plus de problème avec la clé primaire.

Discussions similaires

  1. Insertion d'une nouvelle ligne dans base de donnée
    Par fohytawa dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/12/2017, 13h51
  2. [E-03] insertion de lignes dans base de données
    Par alainmante dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/10/2008, 19h01
  3. Probleme insertion données dans base ACCESS
    Par Ice-tea dans le forum SGBD
    Réponses: 7
    Dernier message: 20/08/2007, 15h38
  4. [SQL] Insertion multiple dans base de donnée
    Par leroidje dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/08/2007, 14h24
  5. [ARRAY]insertion variable dans base de donnée
    Par lazzeroni dans le forum JDBC
    Réponses: 2
    Dernier message: 30/03/2006, 11h33

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