IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Comment exécuter un fichier SQL à partir d'un bouton


Sujet :

JDBC Java

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 95
    Points : 80
    Points
    80
    Par défaut Comment exécuter un fichier SQL à partir d'un bouton
    Bonjour,

    Je voudrais savoir comment est - ce que je pourrais executer un script sql contenant des requêtes (alter table, create table etc..) à partir d'un bouton sous Java Swing.
    Je dois faciliter les mises à jour d'une application et j'ai à disposition des requêtes me permettant de les faire.

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Le plus simple est de le faire via JDBC.
    Tu commences par créer un objet Connection
    Ensuite tu l'utilises pour créer un objet Statement
    Tu utilises ce statement pour exécuter tes commandes sql.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    J'espère que c'est pour une base locale personnelle (non partagée). Parce que sinon, une telle fonction pourrait permettre à quelqu'un de bousiller la base, ou d'introduire des éléments pour récupérer des informations, en modifiant le script, ou en exécutant directement les commandes auquelles il va avoir le droit forcément : vaut mieux que cela soit une procédure d'admin qu'on ne peut passer que depuis le serveur, à défaut, passer par une procédure stockée pour éviter qu'on modifie le script côté client. Même en local, une procédure stockée, avec un compte différent pour l'exécution et la modification de la proc sto permettrait d'éviter que quelqu'un ajoute ses tables/triggers/etc pour récupérer des infos, ou invoque directement des comamndes, gen alter/create table ou autre, dont les grants sont nécessaires. En plus la procsto étant dans la base, cela faciilite l'aspect gestion de version de modèle.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 95
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Le plus simple est de le faire via JDBC.
    Tu commences par créer un objet Connection
    Ensuite tu l'utilises pour créer un objet Statement
    Tu utilises ce statement pour exécuter tes commandes sql.
    Bonjour et merci pour la proposition de réponse,
    J'utilise déjà la méthode via JDBC dans mes DAO mais je n'ai aucune idée de comment parcourir un fichier .sql. Un de mes professeurs m'a conseillé d'utiliser ce qu'on appelle un "loader" mais je n'arrive pas à savoir à quoi cela correspond. D'autant plus, quand je fais des recherches sur cette outil, je tombe sur le "java progress bar".

    Mais sinon merci pour le conseil, je vais creuser sur cette piste et revenir avec plus de détails.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 95
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Salut,

    J'espère que c'est pour une base locale personnelle (non partagée). Parce que sinon, une telle fonction pourrait permettre à quelqu'un de bousiller la base, ou d'introduire des éléments pour récupérer des informations, en modifiant le script, ou en exécutant directement les commandes auquelles il va avoir le droit forcément : vaut mieux que cela soit une procédure d'admin qu'on ne peut passer que depuis le serveur, à défaut, passer par une procédure stockée pour éviter qu'on modifie le script côté client. Même en local, une procédure stockée, avec un compte différent pour l'exécution et la modification de la proc sto permettrait d'éviter que quelqu'un ajoute ses tables/triggers/etc pour récupérer des infos, ou invoque directement des comamndes, gen alter/create table ou autre, dont les grants sont nécessaires. En plus la procsto étant dans la base, cela faciilite l'aspect gestion de version de modèle.
    Salut,

    OUlalala tant de contraintes que je n'imaginais pas possible ahah.
    Alors je me suis un peu formé au PL/SQL ces derniers jours donc je peux essayer de passer par une procédure. Je vais prendre en compte toutes les contraintes et les appliquer dans mon développement. Et si j'ai bien compris, il faudrait que je fasse deux proc, une pour l'exécution et l'autre pour la modification.

    Et merci à toi aussi pour l'aide, je vais aussi creuser vers cette voie!

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Pour lire ton fichier de commandes sql, le plus simple est de passer par un BufferedReader et toute la série d'objet de java.io : File, InputStream etc...

    Avec un BufferedReader, tu vas lire les lignes de ton fichier et ensuite il faudra traiter les blocs d'instructions qui peuvent être écrites sur plusieurs lignes.
    Il convient donc de convenir d'un caractère de fin d'instruction dans le fichier, généralement, on utilise un ";" (mais ça peut être gênant si ton fichier contient des définitions de trigger, de procédures ou de fonctions).

    Une fois la fin d'instruction atteinte, il n'y a plus qu'à la passer au Statement pour l'exécuter... facile quoi
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 95
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Pour lire ton fichier de commandes sql, le plus simple est de passer par un BufferedReader et toute la série d'objet de java.io : File, InputStream etc...

    Avec un BufferedReader, tu vas lire les lignes de ton fichier et ensuite il faudra traiter les blocs d'instructions qui peuvent être écrites sur plusieurs lignes.
    Il convient donc de convenir d'un caractère de fin d'instruction dans le fichier, généralement, on utilise un ";" (mais ça peut être gênant si ton fichier contient des définitions de trigger, de procédures ou de fonctions).

    Une fois la fin d'instruction atteinte, il n'y a plus qu'à la passer au Statement pour l'exécuter... facile quoi
    C'est ce que j'ai cru voir en faisant mes recherches. J'ai aussi trouvé une notion de bashing process. J'ai suivi la piste donné mais lors du choix du fichier et de la lecture du fichier, mon form reste bloqué.

    Voici le code développé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
       private void btnChoisirActionPerformed(java.awt.event.ActionEvent evt) {                                           
                JFileChooser dialogue = new JFileChooser();
                 Scanner scanner = new Scanner(System.in);
                // affichage
                dialogue.showOpenDialog(null);
     
     
                String nomF = dialogue.getSelectedFile().getName();
     
                txtNomFichier.setText(nomF);
     
                // récupération du fichier sélectionné
                System.out.println("Fichier choisi : " + nomF);
     
                String line;
                BufferedReader br = null;
     
                try{
                    br = new BufferedReader(new FileReader(dialogue.getSelectedFile()+scanner.next()));
     
                }
                catch(FileNotFoundException e){
                    System.out.println(e.getMessage()+"file pas trouvé");
     
                }
     
                try{
                    while((line = br.readLine())!=null){
                        System.out.println(line);
                    }
     
                }catch(IOException e){
                    System.out.println(e.getMessage()+"erreur lecture ");
     
     
                }
     
     
     
     
     
     
        }

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    +scanner.next() ça bloque tant qu'on a pas saisi quelque chose au clavier !

    Elle sert à quoi cette lecture au clavier, puisqu'on a sélectionné un fichier via un dialogue Swing ?

    Pour lire un fichier sans faire de boucle sur un BufferedReader, on peut utiliser java.nio.file.Files.readString(), à la rigueur un Files.readAllLines() ou Files.lines().
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 95
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    +scanner.next() ça bloque tant qu'on a pas saisi quelque chose au clavier !

    Elle sert à quoi cette lecture au clavier, puisqu'on a sélectionné un fichier via un dialogue Swing ?

    Pour lire un fichier sans faire de boucle sur un BufferedReader, on peut utiliser java.nio.file.Files.readString(), à la rigueur un Files.readAllLines() ou Files.lines().
    Alors la lecture auclabier ne me sert à rien. Et il me semble que .readAllLines() ne soit disponible que sur C# non ?

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Iloyd Voir le message
    .readAllLines() ne soit disponible que sur C# non ?
    java.nio.file.Files.readAllLines(java.nio.file.Path).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 95
    Points : 80
    Points
    80
    Par défaut
    Bonjour,

    Je reviens dans la discussion et j'ai commencé à comprendre le principe du Bufferread mais je ne comprends pas mon erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    try {
             String sCurrentLine;
             br = new BufferedReader(new FileReader("in.txt"));
     
             while ((sCurrentLine = br.readLine()) != null) {
              System.out.println(sCurrentLine);
             }
     
            } catch (IOException e) {
             e.printStackTrace();
            } finally {
             try {
              if (br != null)br.close();
             } catch (IOException ex) {
              ex.printStackTrace();
             }
            }
    Ça me met que le fichier spécifié est introuvable alors qu'il se trouve sur le bureau.

  12. #12
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2017
    Messages : 95
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par Iloyd Voir le message
    Bonjour,

    Je reviens dans la discussion et j'ai commencé à comprendre le principe du Bufferread mais je ne comprends pas mon erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    try {
             String sCurrentLine;
             br = new BufferedReader(new FileReader("in.txt"));
     
             while ((sCurrentLine = br.readLine()) != null) {
              System.out.println(sCurrentLine);
             }
     
            } catch (IOException e) {
             e.printStackTrace();
            } finally {
             try {
              if (br != null)br.close();
             } catch (IOException ex) {
              ex.printStackTrace();
             }
            }
    Ça me met que le fichier spécifié est introuvable alors qu'il se trouve sur le bureau.

    J'ai pu résoudre mon erreur, il me manquait d'indiquer le chemin du fichier.

Discussions similaires

  1. Comment exécuter un fichier SQL à partir d'un choix radio button
    Par maserati dans le forum Développement Web en Java
    Réponses: 18
    Dernier message: 30/12/2011, 09h56
  2. Réponses: 1
    Dernier message: 02/04/2007, 11h23
  3. Comment exécuter un fichier .sql?
    Par alexandrebergercyr dans le forum Oracle
    Réponses: 2
    Dernier message: 07/03/2007, 20h57
  4. Comment exécuter un fichier SQL ?
    Par NicaeaCivitas dans le forum JDBC
    Réponses: 3
    Dernier message: 09/11/2006, 11h25
  5. [C# .Net 2.0] Comment exécuter un fichier SQL ?
    Par bisounux dans le forum Windows Forms
    Réponses: 4
    Dernier message: 20/09/2006, 20h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo