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 :

Requête SQL avec un String


Sujet :

JDBC Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Points : 58
    Points
    58
    Par défaut Requête SQL avec un String
    Bonjour,

    J'essaye d'écrire une méthode avec une variable de type string en entrée, mais ça m'affiche l'erreur : "Trop peu de paramètres. 1 attendu"
    Je pense que cela vient de la syntaxe avec les ' et les " .

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        public static void Supprimer_Image(String path_file){
            try{
                String query = "DELETE FROM Images WHERE path_file='"+path_file+"'";
                cnx = connecterDB();
                st=cnx.createStatement();
                st.executeUpdate(query);
                System.out.println("Bien supprimé !");
            }
            catch (Exception err) {
                System.out.println( "Error: " + err );
            }
        }
    Merci de votre aide

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    La requête semble correcte. Peux-tu nous donnée la trace et non juste le message d'erreur en remplacant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println( "Error: " + err );
    Par:
    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Points : 58
    Points
    58
    Par défaut
    Merci voici la trace :

    java.sql.SQLException: [Microsoft][Pilote ODBC Microsoft Access] Trop peu de param?tres. 1 attendu.

    at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6964)
    at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7121)
    at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3117)
    at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:337)
    at sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(JdbcOdbcStatement.java:287)
    at programme_test.Programme_Test.Supprimer_Image(Programme_Test.java:52)
    at programme_test.Programme_Test.main(Programme_Test.java:65)

  4. #4
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Fait un écho de ta requête SQL et tente de la passé directement en base de données pour voir le résultat.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Points : 58
    Points
    58
    Par défaut
    Ah alors voila ce que j'ai quand je rentre la meme chose que dans ma fonction (le chemin de l'image que je veux supprimer) :

    Nom : echo.JPG
Affichages : 432
Taille : 21,2 Ko

    ça doit être le paramètre attendu cette valeur non ?
    J'ai peu être mal écrit ma requête ?

    je veux supprimer dans ma table Images la ligne contenant le chemin "x"

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Les anti-slashs doivent être échappés dans une requête sql, pour éviter ce genre de problème, et les injections sql, utilise une requête préparée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String query = "DELETE FROM Images WHERE path_file= ? ";
                cnx = connecterDB();
                PreparedStatement ps=cnx.prepareStatement(query);
                ps.setString(1, path_file)
                ps.executeUpdate();
                System.out.println("Bien supprimé !");
    A+.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Points : 58
    Points
    58
    Par défaut
    Merci beaucoup
    ça à l'air de fonctionner mais j'ai une autre erreur maintenant, un problème de driver.

    erreur :

    java.sql.SQLException: Driver does not support this function
    at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeUpdate(JdbcOdbcPreparedStatement.java:163)

    Peut-on faire un truc pour que le driver supporte cette fonction ?

  8. #8
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Peut-on voir ton code du bloc catch et le console d'erreur en complet?
    Sinon essaie avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String query = "DELETE * FROM Images WHERE path_file= ? ";

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Points : 58
    Points
    58
    Par défaut
    ça ne marche pas non plus même erreur

    Je mets tout mon code ^^ :

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    package programme_test;
    import java.sql.*;
     
    public class Programme_Test {
     
        static Connection cnx;
        static Statement st;
        static ResultSet rst;
     
     
     
        public static Connection connecterDB() throws ClassNotFoundException, SQLException{
            try{
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                String dataSourceName = "BaseDeDonnee" + "";
                String dbURL = "jdbc:odbc:" + dataSourceName;
                Connection cnx =  DriverManager.getConnection(dbURL, "","");
                System.out.println("OK");
                return cnx;  
            }
            catch (Exception err) {
                System.out.println( "Error: " + err );
                return null;
            }
        }
     
        public  static void Ajouter_Image(String file_path,int color_percentage,String centered, int edge_complexity, int level){
            try{
                String query = "INSERT INTO Images VALUES('"+file_path+"',"+color_percentage+",'"+centered+"',"+edge_complexity+","+level+")";
                cnx = connecterDB();
                st=cnx.createStatement();
                st.executeUpdate(query);
                System.out.println("Ajouté");
                st.close();
                cnx.close();
            }
            catch (Exception err) {
                System.out.println( "Error: " + err );
            }
     
     
        }
     
        public static void Supprimer_Image(String path_file){
            try{
                String query = "DELETE * FROM Images WHERE path_file=?";
                cnx = connecterDB();
                PreparedStatement ps =cnx.prepareStatement(query);
                ps.setString(1,path_file);
                ps.executeUpdate(query);
                System.out.println("Bien supprimé !");
                st.close();
                cnx.close();
            }
            catch (Exception err) {
                err.printStackTrace();
            }
        }
     
        public static void main(String[] args) throws SQLException{
     
            //Ajouter_Image("C:\\Users\\guill\\OneDrive\\Documents\\Stage Italie\\Photos_Java\\hello.jpg",65,"non", 80, 3);
            Supprimer_Image("C:/Users/guill/OneDrive/Documents/Stage Italie/Photos_Java/CIAO.jpg");
     
            try{
                cnx = connecterDB();
                st=cnx.createStatement();
                rst=st.executeQuery("SELECT * FROM Images");
     
                while(rst.next()){
                    System.out.println(rst.getString("file_path"));
                    System.out.println(rst.getInt("color_percentage"));
                    System.out.println(rst.getString("centered"));
                    System.out.println(rst.getInt("edge_complexity"));
                    System.out.println(rst.getInt("level"));
                }
                rst.close();
                st.close();
                cnx.close();
            }
            catch (Exception err) {
                System.out.println( "Error: " + err );
            }
     
        }
    }
    et la console :

    run:
    OK
    java.sql.SQLException: Driver does not support this function
    at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeUpdate(JdbcOdbcPreparedStatement.java:163)
    OK
    at programme_test.Programme_Test.Supprimer_Image(Programme_Test.java:53)
    at programme_test.Programme_Test.main(Programme_Test.java:66)
    C:\Users\guill\OneDrive\Documents\Stage Italie\Photos_Java\CIAO.jpg
    65
    non
    80
    3
    C:\Users\guill\OneDrive\Documents\Stage Italie\Photos_Java\leone.jpg
    65
    non
    80
    3
    C:\Users\guill\OneDrive\Documents\Stage Italie\Photos_Java\hello.jpg
    65
    non
    80
    3
    BUILD SUCCESSFUL (total time: 0 seconds)


    J'ai bien 3 lignes dans a BDD.

  10. #10
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     PreparedStatement ps =cnx.prepareStatement(query);
                ps.setString(1,path_file);
                ps.executeUpdate(query); // ici t'as passé un paramètre
    et le code que j'ai posté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     PreparedStatement ps=cnx.prepareStatement(query);
                ps.setString(1, path_file);
                ps.executeUpdate(); // j'ai rien mis ici
    Tu ne dois pas passé la requête en paramètre dans executeUpdate.

    Et utilise aussi un preparedStatement pour l'insert.

    A+.

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Points : 58
    Points
    58
    Par défaut
    Merci,

    oui j'avais testé mais ça me rajoute 1 paramètre attendu :

    Console :

    run:
    OK
    java.sql.SQLException: [Microsoft][Pilote ODBC Microsoft Access] Trop peu de param?tres. 2 attendu.
    at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6964)
    OK
    C:\Users\guill\OneDrive\Documents\Stage Italie\Photos_Java\CIAO.jpg
    65
    at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7121)
    non
    80
    3
    C:\Users\guill\OneDrive\Documents\Stage Italie\Photos_Java\leone.jpg
    65
    non
    80
    3
    C:\Users\guill\OneDrive\Documents\Stage Italie\Photos_Java\hello.jpg
    65
    non
    80
    3
    at sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3156)
    at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(JdbcOdbcPreparedStatement.java:215)
    at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeUpdate(JdbcOdbcPreparedStatement.java:137)
    at programme_test.Programme_Test.Supprimer_Image(Programme_Test.java:53)
    at programme_test.Programme_Test.main(Programme_Test.java:66)
    BUILD SUCCESSFUL (total time: 0 seconds)

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu peux nous montrer ton code à jour.

    au passage je crois qu'il est bon de rappeler que le driver jdbcodbc n'est plus supporté par oracle ni fournis par oracle. La dernière version à avoir inclu ce driver est java 7, or java 7 a été discontinuée il y a plus d'un an. tu ne devrais pas utiliser un java inférieur à java 8 pour un nouveau projet. Tu ne devrais donc même pas avoir accès à ce driver puisqu'il n'existe plus.

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Points : 58
    Points
    58
    Par défaut
    Malheureusement je ne peux pas changer de version.
    Je viens de rejoindre un projet qui est en route depuis 3 ans tout est programmé avec cette version je n'ai pas le choix :/

    voici mon code :

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    package connexiondb;
     
    import java.sql.*;
     
    /**
     *
     * @author guill
     */
    public class ConnexionDB {
     
       static Connection cnx;
        static Statement st;
        static ResultSet rst;
     
     
     
        public static Connection connecterDB() throws ClassNotFoundException, SQLException{
            try{
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                String dataSourceName = "BaseDeDonnee" + "";
                String dbURL = "jdbc:odbc:" + dataSourceName;
                Connection cnx =  DriverManager.getConnection(dbURL, "","");
                System.out.println("OK");
                return cnx;  
            }
            catch (Exception err) {
                System.out.println( "Error: " + err );
                return null;
            }
        }
     
        public  static void Ajouter_Image(String file_path,int color_percentage,String centered, int edge_complexity, int level){
            try{
                String query = "INSERT INTO Images VALUES('"+file_path+"',"+color_percentage+",'"+centered+"',"+edge_complexity+","+level+")";
                cnx = connecterDB();
                st=cnx.createStatement();
                st.executeUpdate(query);
                System.out.println("Ajouté");
                st.close();
                cnx.close();
            }
            catch (Exception err) {
                System.out.println( "Error: " + err );
            }
     
     
        }
     
        public static void Supprimer_Image(String path_file){
            try{
                String query = "DELETE FROM Images WHERE path_file=?";
                cnx = connecterDB();
                PreparedStatement ps =cnx.prepareStatement(query);
                ps.setString(1,path_file);
                ps.executeUpdate();
                System.out.println("Bien supprimé !");
                st.close();
                cnx.close();
            }
            catch (Exception err) {
                err.printStackTrace();
            }
        }
     
        public static void main(String[] args) throws SQLException{
     
            //Ajouter_Image("C:\\Users\\guill\\OneDrive\\Documents\\Stage Italie\\Photos_Java\\hello.jpg",65,"non", 80, 3);
            //Supprimer_Image("C:/Users/guill/OneDrive/Documents/Stage Italie/Photos_Java/CIAO.jpg");
     
            try{
                cnx = connecterDB();
                st=cnx.createStatement();
                rst=st.executeQuery("SELECT * FROM Images");
     
                while(rst.next()){
                    System.out.println(rst.getString("file_path"));
                    System.out.println(rst.getInt("color_percentage"));
                    System.out.println(rst.getString("centered"));
                    System.out.println(rst.getInt("edge_complexity"));
                    System.out.println(rst.getInt("level"));
                }
                rst.close();
                st.close();
                cnx.close();
            }
            catch (Exception err) {
                System.out.println( "Error: " + err );
            }
     
        }
     
    }

  14. #14
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                String query = "DELETE FROM Images WHERE path_file=?";
    vu le reste de ton code, c'est file_path ton paramètre.

    pour des raisons obscur, les colonnes inconnues se muent en paramètre sur access

  15. #15
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 110
    Points : 58
    Points
    58
    Par défaut
    Alors vous venez de me débloquez complètement j'ai inversé les mots file et path ^^

    Du coup dans ma table c'est file_path et non path_file c'est pour ça qu'il ne trouvait pas le paramètre :/

    Merciii beaucoup et désolé ^^

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

Discussions similaires

  1. requête sql avec clause INNER JOIN
    Par new_wave dans le forum Langage SQL
    Réponses: 1
    Dernier message: 12/08/2005, 15h47
  2. Requête SQL avec une réponse unique
    Par Glutinus dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/07/2005, 16h35
  3. Problème de requête SQL avec instruction TRANSFORM
    Par Nosper dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 21/06/2005, 16h15
  4. requête SQL avec paramètre en vb avec base de donnée SQL srv
    Par dialydany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/02/2005, 10h33
  5. PB requète SQL avec Interbase
    Par missllyss dans le forum InterBase
    Réponses: 2
    Dernier message: 15/07/2003, 11h37

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