Bonjour, je veux supprimer toutes les lignes de ma table mysql appelée "kosik" et les passer à une autre table appelée "obj_zoznam".
J'utilise ce code en java:
String orderstatus = "Accepted"; try { stmt = con.createStatement(); stmt2 = con.createStatement(); stmt3 = con.createStatement(); rs = stmt.executeQuery("select ID as idzaz, ID_pouzivatela as idpou, ID_tovaru as idtov, cena as suma, ks as kusy from kosik order by ID limit 1"); while (rs.next()) { int zaz = rs.getInt("idzaz"); int pou = rs.getInt("idpou"); int tov = rs.getInt("idtov"); int suma = rs.getInt("suma"); int kusy = rs.getInt("kusy"); String sstr = "insert into obj_zoznam (ID_pouzivatela, ID_tovaru, suma, ks, stav) values (" + "'" + id_usera + "', " + "'" + tov + "', " + "'" + suma + "', " + "'" + kusy + "', " + "'" + orderstatus + "')"; String sstr2 = "delete from kosik where ID = " + zaz; stmt2.executeUpdate(sstr); stmt3.executeUpdate(sstr2); } stmt.close(); stmt2.close(); stmt3.close(); } catch (Exception e) { out.println("Error in writing: " + e.toString()); }
4 Réponses :
J'essaie de comprendre comment supprimer tous les enregistrements de ce tableau.
Ensuite, supprimez cette condition de filtre
where
de votre instructiondelete
delete from kosik
Désolé j'ai oublié d'ajouter à ma question que ce code copie toujours un seul enregistrement dans la table "obj_zoznam". Je souhaite copier tous les enregistrements et supprimer ces enregistrements une fois qu'ils ont été copiés.
Supprimez le LIMIT 1
de votre SELECT
pour afficher tous les enregistrements et pas seulement 1. Sur cette ligne:
rs = stmt.executeQuery("select ID as idzaz, ID_pouzivatela as idpou, ID_tovaru as idtov, cena as suma, ks as kusy from kosik order by ID");
Supprimez la limite 1:
rs = stmt.executeQuery("select ID as idzaz, ID_pouzivatela as idpou, ID_tovaru as idtov, cena as suma, ks as kusy from kosik order by ID limit 1");
Ne supprimez PAS le WHERE
de DELETE
ou vous sélectionnerez 1 enregistrement ( stmt ), insérez-le sur l'autre table ( stmt2
) puis effacez toute la table avant d'insérer tous les autres enregistrements dans obj_zoznam
( stmt3
).
Désolé j'ai oublié d'ajouter à ma question que ce code copie toujours un seul enregistrement dans la table "obj_zoznam". Je souhaite copier tous les enregistrements et supprimer ces enregistrements une fois qu'ils ont été copiés.
@TomSmith c'est la solution pour cela. La boucle while sera exécutée pour chaque enregistrement que vous afficherez à partir de la sélection de la première requête. La limite 1 limitait le jeu de résultats à un seul enregistrement, le supprimer sélectionnera tous les enregistrements et la boucle insérera les données sur l'autre table et la supprimera avec la suppression (pour chaque enregistrement). Mettez un point d'arrêt dans la boucle et vous verrez qu'il sera atteint plusieurs fois.
vous limitez le résultat de la requête à une ligne, vous n'aurez donc toujours qu'un seul identifiant. l'exécution du sstr2 supprimera toujours les enregistrements avec le premier identifiant
Si vous souhaitez supprimer les entrées conservant la structure de la table, l'utilisation de la commande truncate devrait fonctionner.
truncate table kosik