1
votes

Je ne parviens pas à supprimer toutes les lignes de la table mysql

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());
        }


0 commentaires

4 Réponses :


1
votes

J'essaie de comprendre comment supprimer tous les enregistrements de ce tableau.

Ensuite, supprimez cette condition de filtre where de votre instruction delete

delete from kosik

1 commentaires

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.



1
votes

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 ).


2 commentaires

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.



0
votes

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


0 commentaires

0
votes

Si vous souhaitez supprimer les entrées conservant la structure de la table, l'utilisation de la commande truncate devrait fonctionner.

truncate table kosik


0 commentaires