Modifier une base de donnée avec Java + sql

Fermé
needHelp - Modifié le 29 oct. 2022 à 23:24
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 30 oct. 2022 à 17:47

Bonjour,

Je suis débutante en Java et j'aimerais savoir comment augmenté les salaires se trouvant dans ma base de données d'un montant spécifique. Je suis un peu perdue pouvez-vous m'aider svp ? 

C'est dans mon while le problème avec la variable salary je crois que la syntaxe pour faire mon calcul est faux.

voici ma fonction: 

public static String raiseSalary(String job, float amount) throws SQLException, ClassNotFoundException{
        Connection conn = getConnection();
        String req = "SELECT sal+"+amount+" AS salRaise from emp where job='"+job+"' ";
        try (Statement stmt = conn.createStatement();
            ResultSet result = stmt.executeQuery(req)) {
            String ReadSal = "";
            while (result.next()) {
                //float salary = result.getInt(1) + amount;
                String req2 = "UPDATE emp set sal=" + result.getString("salRaise")+ " where job='" + job + "'";
                try (Statement stmt2 = conn.createStatement();) {
                    stmt2.executeUpdate(req2);
                }
                ReadSal = result.getString("salRaise");

            }
            return ReadSal;
 }catch (SQLException e){
            System.out.println(e);
        }
        return null;
    }
A voir également:

1 réponse

jee pee Messages postés 40461 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 19 novembre 2024 9 420
Modifié le 30 oct. 2022 à 11:02

Bonjour,

Je ne connais pas Java donc ne te serais d'aucune aide sur la syntaxe. Mais ta logique de mise à jour m'interpelle.

Pourquoi faire un select pour récupérer le salaire augmenté, puis après un update en reprenant ce salaire augmenté. Une mise à jour directe me semble plus facile, comme (sans garantie sur le formalisme de la syntaxe java avec ce mélange de simple et double quotes)

"UPDATE emp set sal = sal + " + "+amount+" + " where job = " + "+job+"

0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
30 oct. 2022 à 12:20

Bonjour,

Je te rejoins sur le principe de tout faire en une seule requête, sur la syntaxe Java ce serait :

"UPDATE emp SET sal = sal + " + amount + " WHERE job = '" + job + "';"

Ou mieux en travaillant avec des PreparedStatement pour éviter les injections SQL :

"UPDATE emp SET sal = sal + ? WHERE job = ?;"

Voir : https://www.baeldung.com/java-statement-preparedstatement

0
needHelp > KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024
Modifié le 30 oct. 2022 à 15:12

Bonjour,

Merci pour cette réponse, je ne savais pas si c'était possible de le faire en une seule requête. Par contre j'aimerai savoir comment je pourrais faire en sorte que toutes les lignes du tableau qui répondent à la clause "where" puissent être modifié en utilisant Java. 

Dois-je utiliser une boucle while ?? 

0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019 > needHelp
30 oct. 2022 à 17:47

Quand Java va envoyer la requête SQL à la base de données, elle sera exécutée comme n'importe quelle autre requête.

La clause WHERE de ton UPDATE peut concerner zéro, une, plusieurs voire toutes les valeurs, ça ne change rien pour le code Java, il faut juste envoyer une seule requête, donc pas besoin de la boucle while.

NB. En terme de performances il est toujours préférable de limiter autant que possible le nombre d'allers-retours entre l'application et la base de données. Faire 1 requête de suppression de N éléments sera nettement meilleur que N requêtes de suppression de 1 élément.

0