2 votes

Pourquoi le PrepareStatement ne génère-t-il pas la requête SQL correcte?

Voici mon code PrepareStatement. Il ne génère pas la requête SQL correcte. Il ne va pas au-delà du premier énoncé println. Il affiche également ** NON SPÉCIFIÉ ** dans la requête (voir ci-dessous).

Comment pouvons-nous résoudre ce problème, s'il vous plaît?

   ps1 = con.prepareStatement(
                     "select stuId, name, relationsName, houseAddress, houseNumber from temp where "
                        + " stuId like '?%' and " 
                        + " sex = '?' and " 
                        + " name like '?%' and "
                        + " age BETWEEN ? and ? and "
                        + " relationsName like '?%' " 
                        + " order by name asc limit 0, 150000 "
               );

               System.out.println("ps1 Avant : " + ps1);

sortie:

ps1 Avant : com.mysql.jdbc.JDBC4PreparedStatement@14d55de: select stuId, name, relationsName, houseAddress, houseNumber from temp where stuId like '?%' and sex = '?' and name like '?%' and age BETWEEN ** NON SPÉCIFIÉ ** et ** NON SPÉCIFIÉ ** et relationsName like '?%' order by name asc limit 0, 150000

Il ne va pas au-delà de ce point. Il affiche également NON SPÉCIFIÉ dans la requête (veuillez voir jusqu'à la fin).

Toute suggestion s'il vous plaît?

       ps1.setString(1, stuId);
       ps1.setString(2, gender);
       ps1.setString(3, name);
       ps1.setInt(4, startAge);
       ps1.setInt(5, endAge);
       ps1.setString(6, relationsName);

       System.out.println("ps1 Après : " + ps1);

       rs = ps1.executeQuery();

11voto

John Woo Points 132738

Parce que les espaces réservés étaient inclus entre guillemets simples, ce qui en fait une valeur et non plus un paramètre. vous devriez vous en débarrasser, par exemple

ps1 = con.prepareStatement(
                 "select stuId, name, relationsName, houseAddress, houseNumber from temp where "
                    + " stuId like ? and " 
                    + " sex = ? and " 
                    + " name like ? and "
                    + " age BETWEEN ? and ? and "
                    + " relationsName like ? " 
                    + " order by name asc limit 0, 150000 "
           );

pour l'instruction LIKE, vous devez concaténer la valeur en java, pas en sql,

ps1.setString(1, stuId + '%');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X