0
votes

Comment copier des données d'une table à une autre, puis supprimez les données de la première table à l'aide de Java?

Deux tables sont présentes dans la base de données, une table étudiante avec colonnes roll_no (pk), nom, grade et dob, une autre table StudentLet avec colonnes roll_no, nom, grade et sortant_date.

Je veux supprimer l'enregistrement de l'étudiant de la table étudiante dont le rouleau NO est entré par l'utilisateur et ajoutez le numéro de rouleau n °, nom, grade et quitte_date (la date à laquelle l'enregistrement est supprimé et ajouté à la table) à la table StudentLeft.

Ceci est ma méthode. xxx

Ce sont les erreurs. xxx

J'utilise la base de données Oracle 11G Express. < / p>


4 commentaires

Ok ... et qu'est-ce qui fonctionne (ce n'est pas) dans votre code? Pouvez-vous être précis sur ce que votre problème est?


Ne peut pas comprendre correctement quelle est l'erreur. Montrant deux erreurs un dans le lot d'exécution et une autre dans la région où je ferme la déclaration préparée.


Modifiez votre question et écrivez-y ces erreurs


Et vous vous attendez à ce que nous sachions quelle est l'erreur, pendant que vous ne nous indiquez aucune information sur ce qui pourrait mal tourner, sans parler d'un message d'erreur? Vous imprimez vos stackTraces (personnellement, je les mettrais dans des fichiers journaux), vous devez donc savoir exactement ce qui ne va pas


3 Réponses :


2
votes

Si votre requête ne doit pas être xxx

au lieu de xxx


4 commentaires

Pourriez-vous le modifier pour être plus lisible? Insérez vos SQL entre crochets de code


Bien que cela soit reproché à nouveau, cela peut éventuellement la solution que l'OP est la recherche, alors je ne sais pas pourquoi quelqu'un voudrait voter


Exécuter échouera si la requête est fausse. Je pense que c'est la solution.


J'ai fait voté par erreur parce que je l'ai lu l'inverse. Désolé pour ça, j'ai déjà changé mon vote



0
votes

Votre code de suppression utilisé la mauvaise déclaration préparée, manquant un exécuté.

Il est conseillé d'utiliser des ressources traitantes comme ci-dessous, pour la fermeture automatique, même sur le retour ou l'exception. (Il s'occupe également des étendues variables.) xxx

puis il faut sélectionner + insérer dans la base de données, à l'aide d'une instruction (insérer SELECT).

Le SQL de l'étudiantlog est un peu incompréhensible pour moi, mais un bel insert serait: xxx

supprimer le besoin Java Niblage d'accès à la base de données. >


2 commentaires

vous avez manqué l'erreur dans la suppression, elle devrait être supprimée, au lieu de supprimer simplement


@Sultuske j'ai ajouté un de, le Docs raconter De est facultatif. Avec de cela est moins terrifiant.



2
votes

Le code que vous avez écrit peut être simplifié un peu:

  public static void main(String[] args) {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
            return;
        }

        int rollNo = Integer.parseInt(args[0]);
        try (Connection connection = dataSource.getConnection()) {
            connection.setAutoCommit(false);

            String transferStatement = "INSERT INTO StudentLog (roll_no, name, standard, leaving_date) " +
                    "SELECT roll_no, name, standard, SYSDATE FROM Student WHERE roll_no = ?";
            try (PreparedStatement stmt = connection.prepareStatement(transferStatement)) {
                stmt.setInt(1, rollNo);
                stmt.executeUpdate();
            }

            String deleteStatement = "DELETE FROM Student WHERE roll_no = ?";
            try (PreparedStatement stmt = connection.prepareStatement(deleteStatement)) {
                stmt.setInt(1, rollNo);
                stmt.executeUpdate();
            }

            connection.commit();
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
    }


0 commentaires