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 :

[MySql] Création de la base de données si elle n'exsite pas


Sujet :

JDBC Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Arménie

    Informations forums :
    Inscription : Mars 2011
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Je suis en train de faire une application MySql / Java et j'aimerais faire en sorte de créer la base de données si celle-ci n'existe pas.

    Concrètement, je veux vérifier, pendant la connexion à la base de donnée, si ma base GestionEmploye existe et sinon la créer, ainsi que ses tables Employe et Manager.

    Quelqu'un saurait-il m'expliquer comment faire cela ?
    Comment peut-on détecter si la base existe ou non ?

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Impossible de se connecter si la base n'existe pas, et pour cause, il faut un admin pour la créer.

    Pour savoir si les table existe, suffit de faire un select sur une des tables. si erreur SQL -> créer la table. Perso je me contente de balancer le script sql de création à chaque démarrage en ignorant les erreurs :p

  3. #3
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 796
    Points
    4 796
    Par défaut
    Impossible de se connecter si la base n'existe pas
    En fait on peut toujours se connecter au serveur MySQL avec un compte admin et vérifier dans la base système que la base [GestionEmploye] existe ou pas.
    Après on peut toujours envoyer à MySQL les instructions qui vont bien pour créer la base.

    C'est faisable mais ca sert à rien......... (supprimé)
    Je vois bien que ce qui horripile certaines personnes est que cette façon de faire est plutôt inhabituelle.
    Elle est le fait d'un logiciel standard (comptabilité, paye, ...) qui aurait besoin d'ouvrir une nouvelle base "société" sur un serveur existant.

    Il faut demander à Apach2011 dans quel cadre est son application
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Ce genre de logiciel est en général fourni avec sa base de données.
    Si on utilise une base de données tierce, c'est justement pour utiliser une base déjà existante.

    Je suis d'accord qu'on peux toujours se connecter en admin, j'entendais qu'on ne peux pas se connecter à une base qui n'existe pas

  5. #5
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 796
    Points
    4 796
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    on ne peux pas se connecter à une base qui n'existe pas
    le monde est mal fait
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    511
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 511
    Points : 386
    Points
    386
    Par défaut
    Bonjour

    Il est souvent lourd de déployer une BDD, de ce fait, il est préférable de la créer via la procédure habituelle d'un administrateur (sous MySQL, créer le répertoire de la BDD dans le répertoire data), qui vous donne le login et le mot de passe de connexion avec lesquels vous paramétrez votre application. Ensuite, lors de l’initialisation d'une procédure, vous créez les tables et le reste.

    Pour moi c'est la solution que j'ai adoptée (100 tables), le SQL est dans un fichier properties et le paramétrage de la connexion se fait via une JSP dont l'accès est inhibé si le pool est initialisé.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 3
    Points : 7
    Points
    7
    Par défaut utilisation de jdbc
    Bonjour,

    @Apach2011:
    Grâce au JDBC, tu peux faire un select de SCHEMA_NAME dans INFORMATION_SCHEMA.SCHEMATA <=> "Show databases;"
    Tu peux procéder ainsi :
    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
    String mabase = "GestionEmploye";
    boolean trouvé =false;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection  con = DriverManager.getConnection("jdbc:mysql://localhost:3306/",userid,password); // tu peux remarquer qu'on peut laisser le champs du nom de la base de données vide !
        Statement st1 = con.createStatement();
     
        ResultSet rs1 = st1.executeQuery("show databases;");
        while (rs1.next()) {
            // ici tu fait le traitement que tu veux avec le résultat de la requette, notament vérifier l'éxistence de ta base de données
     
            if (rs1.getString(1).equals(mabase))
                trouvé = true;
            else
                trouvé = false;
        }
     
        if (trouvé == true) 
            System.out.println("la Base de Données existe");
        else{
            System.out.println("la Base de Données n'existe pas");
            creer_mabase(); // jusqu'ici c'est à toi de jouer  !
        }
    }
    catch(SQLException e) {
        System.out.println("erreur sql " + e.toString());
    }
    catch (ClassNotFoundException ex) {
        System.out.println("erreur class not found " + ex.toString());
    }

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Arménie

    Informations forums :
    Inscription : Mars 2011
    Messages : 12
    Points : 15
    Points
    15
    Par défaut
    Bon il y a une solution qui est très simple , c'est de lancer le scripte SQL dès l'exécution de l'application et dans le script SQL, on fait à chaque fois C'est tous !

  9. #9
    Membre chevronné

    Homme Profil pro
    Ingénieur R&D en informatique
    Inscrit en
    Août 2011
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur R&D en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2011
    Messages : 313
    Points : 1 855
    Points
    1 855
    Par défaut
    Avant d'apporter ma contribution au problème qui est posé, je ne comprends pas Apach comment tu ferais pour transmettre tes requêtes
    CREATE IF NOT EXIST
    avec JDBC si tu n'es pas connecté à une BD. Par contre en mode administration cela est possible. Tu peux également nous donner un peu plus de detail pour que nous apprenions cette technique aussi.

    Voici une autre alternative pour résoudre le problème initialement posé :

    Il faut savoir que le SGBD Mysql est toujours livré avec une BD par defaut appelé mysql. Nous allons exploiter cela pour résoudre le problème ainsi qu'il suit :

    1- Dans la classe Java dédiée à la connexion à la Base de données, dans un premier try, essayer de se connecter à sa base de données voulue.

    2- si cette BD n'existe pas, normalement on est rejeté dans le catch du try précédent. A l'intérieur de ce catch, se connecter à la base de données par defaut de Mysql (qui est mysql). Puis, lorsque nous sommes maintenant connecté à cette base mysql, lancer le script de création de sa propre base de données.

    3- Une fois cela fait, on se reconnecte maintenant sur la nouvelle base de données que l'on vient de créer et l'on crée ses tables.

    Voici un squelette de code Java pour le faire:
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
     
    public class Connexion{
     
         Connection conn = null;
         Statement stmt = null;
     
        // Ce constructeur crée la base de données MaBase et toutes ses tables dès la premiere connexion si elle n'existe pas
    public Connexion(){
     
            try{
                Class.forName("com.mysql.jdbc.Driver").newInstance();
            }
            catch(Exception e){
               System.out.println("impossible de charger le pilote");
            }
            try{
               conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/MaBase", user, pass);
            }
            catch(SQLException ek){
                System.out.println("base inexistante: création de la bd MaBase");
                try{
                    try{
                        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql", user, pass);
                    }
                    catch(SQLException eh){  }
     
                 stmt = conn.createStatement();
                 nbre = stmt.executeUpdate("create database MaBase");
                 stmt.close();
                 conn.close();
                }
                catch(SQLException ed){
                  System.out.println("impossible de creer Mabase");
                }
                try{
                    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/MaBase", user, pass);
                    System.out.println(" connexion à MaBase reussi");
                }
                catch(SQLException ef){
                  System.out.println("impossible de se connecter à MaBase");
                }
                try{
                    stmt = conn.createStatement();
     
                    // ici les scripts de création des tables.
     
                    stmt.close();
                   conn.close();
               }
               catch(SQLException eg){
                 System.out.println("impossible de créer les tables");
               }
     
            }
            System.out.println("BASE DÉJÀ EXISTANTE"); 
            try{
                conn.close();
            }
            catch(SQLException v){}
     
     
        }

    Salut à vous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. création d'une base de donnée Mysql en java
    Par nihadelg dans le forum JDBC
    Réponses: 1
    Dernier message: 24/11/2007, 16h45
  2. création d'une base de données
    Par cyrilng dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 18/05/2005, 14h38
  3. Réponses: 4
    Dernier message: 22/09/2004, 09h17
  4. Création d'une base de données contenant des images
    Par gandalf_le_blanc dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 16/06/2004, 15h29

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