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]Passer une valeur dans une requete KO


Sujet :

JDBC Java

  1. #1
    Membre expérimenté

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 1 374
    Points
    1 374
    Par défaut [JDBC]Passer une valeur dans une requete KO
    Bonjour

    J'essaie de passer les valeurs de mes ? dans le code suivant :

    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
     
    		// Put the info in the database and then send a mail for confirmation
    		try {
    			Context context = new InitialContext();
    			DataSource ds = (DataSource) context
    					.lookup("java:comp/env/jdbc/maDataSource");
    			Connection conn = ds.getConnection();
    			try {
    				conn.setAutoCommit(false);
    				PreparedStatement st = conn
    						.prepareStatement("insert into utilisateurs values ('?','ZedroS','password','zedros@zedros.com')");
     
    				try {
    					st.setString(1, "test");
    					st.executeUpdate();}
    				finally {
    					st.close();
    				}
    				conn.commit();
    			} catch (Exception e) {
    				conn.rollback();
    				throw e;
    			} finally {
    				conn.close();
    			}
    		} catch (Exception e) {
    			throw new RuntimeException(e);
    		}
    J'ai ensuite l'erreur suivante :
    java.lang.RuntimeException
    org.postgresql.util.PSQLException: L'indice de la colonne est hors limite : 1, nombre de colonnes : 0.
    Ma requete passe bien quand je mets mes valeurs en dur. D'après ce que je vois sur la javadoc et mon exemple, je suis dans le vrai...

    Au final, je ne comprends franchement pas mon erreur, vous avez des pistes ?

    Pour info, j'utilise postgresql.

    Merci d'avance
    ZedroS
    Merci d'utiliser le bouton [Résolu] pour les sujets qui le sont.
    [pub]mon blog franco anglais, article du moment: Wicket: fournir des données JSON via Ajax[/pub]

  2. #2
    Membre actif Avatar de @ldehan
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 215
    Points : 278
    Points
    278
    Par défaut
    ca m'etonnerais que ta requete passe quand tu met les valeurs en dur

    la syntaxe de l'insert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into <table> (<field>[,<field>]) values (<value>[,<values>])
    il te manque les noms des champs

    insert into utilisateurs values ('?','ZedroS','password','zedros@zedros.com')
    comme tu n'indique aucune colonne, a la premiere valeur qu'il trouve il te fait :
    L'indice de la colonne est hors limite : 1, nombre de colonnes : 0

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 856
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 856
    Points : 34 380
    Points
    34 380
    Par défaut Re: [JDBC]Passer une valeur dans une requete KO
    Citation Envoyé par ZedroS
    Bonjour

    J'essaie de passer les valeurs de mes ? dans le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PreparedStatement st = conn
    						.prepareStatement("insert into utilisateurs values ('?','ZedroS','password','zedros@zedros.com')");
    Bonjour,

    par rapport à ce qui a été dit, tu peux très bien mélanger paramètres et valeurs en dur. Si tu as dans la clause values les valeurs pour toutes les colonnes (et dans l'ordre), pas besoin de spécifier les noms des colonnes (même si ca améliore la maintenabilité, imagines qu'on rajoute une colonne).
    Par contre pour les paramètres, il ne faut les entourer de ' ' sinon ils sont interprétés comme une chaîne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    PreparedStatement st = conn
    						.prepareStatement("insert into utilisateurs values (?,'ZedroS','password','zedros@zedros.com')");
    Eric

  4. #4
    Membre actif Avatar de @ldehan
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 215
    Points : 278
    Points
    278
    Par défaut
    Citation Envoyé par Ricky81
    Si tu as dans la clause values les valeurs pour toutes les colonnes (et dans l'ordre), pas besoin de spécifier les noms des colonnes
    je savais pas ça !

    cela dit le sql ca a jamais été mon fort . de toute façon, il y a les DBA pour ça

  5. #5
    Membre expérimenté

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 1 374
    Points
    1 374
    Par défaut
    Merci pour vos réponses.

    @ldehan : dans l'absolu, nommer les colonnes avant de faire des insert est de toute façon plus évolutif et clair... Mais ce n'est qu'un petit test

    Je teste tout ça ce soir chez moi et j'vous donne le résultat.
    Merci d'utiliser le bouton [Résolu] pour les sujets qui le sont.
    [pub]mon blog franco anglais, article du moment: Wicket: fournir des données JSON via Ajax[/pub]

  6. #6
    Membre expérimenté

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 1 374
    Points
    1 374
    Par défaut
    Je confirme, ça tourne comme ça

    Merci !
    Merci d'utiliser le bouton [Résolu] pour les sujets qui le sont.
    [pub]mon blog franco anglais, article du moment: Wicket: fournir des données JSON via Ajax[/pub]

  7. #7
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 4
    Points
    4
    Par défaut JAVA postgresql
    Bonjour en faite moi j'ai un peu prè le meme probleme, j'ai creer une sequence dans postgresql pour incrementer un ID.
    puis j'ai proceder comme suit pour faire mon insertion. Voila mon code java :

    Connection c=getConnection("base_application");
    Statement statement=c.createStatement();
    String requete="select Last_value from seqcolis";

    ResultSet rset=statement.executeQuery(requete);

    rset.next();
    int ID = rset.getInt(3);
    System.out.println (rset.getString(3));

    rset.cancelRowUpdates();
    statement.close();

    String insertString = "INSERT INTO COLIS"+
    " (idcolis,poids,volumecolis,typeconditionnement)" +
    " VALUES("+ID+","+tokens[13]+","+ tokens[14]+","+tokens[15]+")";
    System.out.println(insertString);
    rset = statement.executeQuery(insertString);
    ligne = f.readLine();
    }
    f.close();
    }
    }



    Mais voila l'exception que j'obtient :

    Exception in thread "main" org.postgresql.util.PSQLException: L'indice de la colonne est hors limite : 3, nombre de colonnes : 1.


    SVP aidez moi c urgent. Merci d'avance.

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

Discussions similaires

  1. Comment passer la valeur d'une cellule dans une macro
    Par senacle dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/06/2018, 15h34
  2. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  3. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  4. Réponses: 1
    Dernier message: 25/09/2006, 17h15
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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