Update avec un select sur une bdd MySql
Résolu
sandraAZUL
-
sandraAZUL -
sandraAZUL -
salut;
je voudrai faire un update sur une colonne de ma table stock si un enregistrement existe déjà pour la colonne desig
et quant j’exécute j'ai l'erreur suivante:
voila mon code java:
helpe me please.....
je voudrai faire un update sur une colonne de ma table stock si un enregistrement existe déjà pour la colonne desig
et quant j’exécute j'ai l'erreur suivante:
can't specify target table for update in from clause
voila mon code java:
if (duplicateExists.next()) { System.out.println("je suis ici update"); String sqlUpdate = "UPDATE stock set qt=((select SUM(ST.qt)AS quant from stock ST)+('"+Q+"'))where desig='"+o+"'"; stmt.executeUpdate(sqlUpdate); }
helpe me please.....
A voir également:
- Update avec un select sur une bdd MySql
- Windows update bloqué - Guide
- Winget update - Guide
- Asus live update - Télécharger - Utilitaires
- Mysql community server - Télécharger - Bases de données
- Nettoyage windows update - Guide
2 réponses
problème résolu
parfois on complique les choses........
voila le code
parfois on complique les choses........
voila le code
if (duplicateExists.next()) { System.out.println("je suis ici update"); String sqlUpdate = "UPDATE stock AS ST set ST.qt=(ST.qt +('"+Q+"'))where ST.desig='"+o+"'"; stmt.executeUpdate(sqlUpdate); System.out.println("selection exist"); }
Bonjour,
Il ne faut pas faire des concaténations dans les requêtes SQL comme tu l'as fait par exemple avec
En effet ce genre de code présente une faille de sécurité (injection SQL)
Exemple : Si je fais
Ton update va donc concerner toute ta table, la restriction sur
On pourrait faire pire, comme
Pour se prémunir de ces failles il faut faire des PreparedStatement
Les
Il ne faut pas faire des concaténations dans les requêtes SQL comme tu l'as fait par exemple avec
where desig='"+o+"'"
En effet ce genre de code présente une faille de sécurité (injection SQL)
Exemple : Si je fais
o = "toto' OR 1=1 -- toto";ta requête devient
where desig='toto' OR 1=1 -- toto
Ton update va donc concerner toute ta table, la restriction sur
desigest annulée par le
OR 1=1.
On pourrait faire pire, comme
where desig='toto'; DELETE stock -- toto
Pour se prémunir de ces failles il faut faire des PreparedStatement
String sqlUpdate = "UPDATE stock set qt=((select SUM(ST.qt) AS quant from stock ST)+(?)) where desig=?"; PreparedStatement stmt = con.prepareStatement(sqlUpdate); stmt.setString(1, Q); stmt.setString(2, o); stmt.executeUpdate();
Les
?représentent des paramètres à remplir avec les méthodes setString, setInt, etc.