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 :

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur Projet
    Inscrit en
    Mai 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Projet
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2017
    Messages : 59
    Points : 40
    Points
    40
    Par défaut java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
    Bonjour à tous,

    Je cherche à faire un projet web avec un accès à une BDD via JDBC.
    Je réalise à travers un formulaire un "Insert into" via un preparedStatement.
    Mais à chaque fois, mon code lance une sqlException au niveau de la ligne 27. Avec cette phrase que je ne comprend pas: "Parameter index out of range (1 > number of parameters, which is 0)."
    J'ai rentré les valeurs de mes paramètres en dur pour disculper la partie web de mon projet.
    Ya t il une âme charitable pour m'aider?

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    //import java.sql.Statement;
     
     
    import model.Conseiller;
     
    public class RequeteSQL {
    	public static void sauverEnBase(Conseiller cons) {
    		String url="jdbc:mysql://localhost/agence";
    		String login="root";
    		String passwd="";
    		Connection cn=null;
    		PreparedStatement st=null;
     
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    			System.out.println("Driver ok");
    			cn= DriverManager.getConnection(url, login, passwd);
    			System.out.println("Connexion réussie");
     
    			String sql="INSERT INTO `conseiller`(`id`, `nom`, `prenom`, `age`) VALUES ('?,?,?,?')";
    			st=cn.prepareStatement(sql);
    			System.out.println("so far so good");
    			st.setInt(1, 5);
    			st.setString(2, "nom");
    			st.setString(3, "prenom");
    			st.setInt(4, 55);
     
     
    			st.executeUpdate(sql);
    			System.out.println("toujours là");
    		}catch (SQLException e) {
    			e.printStackTrace();		
    		}catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}finally {
    			try {
    				cn.close();
    				st.close();
    			}catch (SQLException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Citation Envoyé par Moriceot Voir le message
    Avec cette phrase que je ne comprend pas: "Parameter index out of range (1 > number of parameters, which is 0)."
    Elle dit que tu ne peux pas affecter le paramètre de position 1, puisqu'il n'y aucun paramètre dans ton PreparedWhere.

    Ce sont les quotes qui font que les ? ne sont pas traités comme des paramètres mais juste comme des caractères ? dans du texte. D'ailleurs, il n'y a pas besoin de quote à cet endroit. Enlève_les :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String sql="INSERT INTO `conseiller`(`id`, `nom`, `prenom`, `age`) VALUES ( ?,?,?,? )";]

    Je ne pense pas que les backticks soient utiles par ailleurs.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 467
    Points : 901
    Points
    901
    Billets dans le blog
    5
    Par défaut
    Je te conseille de nommer tes paramètres plutôt que d'utiliser des numéros.
    Plus simple, plus maintenable, et évite de s'embrouiller sur les numéros.

    Au final, on aurait:
    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
    31
    32
    33
    34
    35
    36
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    //import java.sql.Statement;
     
     
    import model.Conseiller;
     
    public class RequeteSQL {
    	public static void sauverEnBase(Conseiller cons) {
    		String url="jdbc:mysql://localhost/agence";
    		String login="root";
    		String passwd="";
     
     
                   Class.forName("com.mysql.jdbc.Driver");
                   String sql="INSERT INTO conseiller(id, nom, prenom, age) VALUES (:id,:nom,:prenom,:age)";
     
    		try (Connection cn= DriverManager.getConnection(url, login, passwd);PreparedStatement st=cn.prepareStatement(sql);){
     
    			st.setInt("id", 5);
    			st.setString("nom", "nom");
    			st.setString("prenom", "prenom");
    			st.setInt("age", 55);
     
     
    			st.executeUpdate(sql);
    		}catch (SQLException e) {
    			e.printStackTrace();		
    		}catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    	}
    }
    Il y a des exemples ici:
    https://www.javaworld.com/article/20...statement.html

    Utilise les try-with ressources également.

    Cordialement.

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur Projet
    Inscrit en
    Mai 2017
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Projet
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2017
    Messages : 59
    Points : 40
    Points
    40
    Par défaut
    Bonjour à tous les deux,

    Merci pour vos conseils.joel.drigo , c'etait bien ça le problème et PhilippeGibault, merci pour le conseil, je ne savais pas que c'était possible.

    Bonne journée,
    Cordialement,

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/01/2010, 18h44
  2. Réponses: 3
    Dernier message: 24/02/2009, 21h26
  3. [java.sql.SQLException: ORA-01002: fetch out of sequence]
    Par chouchou93 dans le forum Oracle
    Réponses: 9
    Dernier message: 30/05/2006, 13h05
  4. java.sql.SQLException: read-only
    Par mehdi.kiwi dans le forum Oracle
    Réponses: 6
    Dernier message: 17/05/2005, 16h46
  5. [JDBC] java.sql.SQLException: Closed Statement
    Par cmoulin dans le forum JDBC
    Réponses: 4
    Dernier message: 03/09/2004, 17h22

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