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

Java Discussion :

Sauvegarde d'une base de données Postgres avec Java


Sujet :

Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Sauvegarde d'une base de données Postgres avec Java
    Salut à tous…..
    Je travaille sur un projet java ou je dois effectuer une sauvegarde de la base de données que j’ai fait avec Postgres…. J’utilise ce bout de codes :
    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
    List<String> cmds = new ArrayList<String>();
    cmds.add("C:\\Program Files\\PostgreSQL\\9.3\\bin\\pg_dump.exe");
    cmds.add("-i");
    cmds.add("-h");
    cmds.add("localhost");
    cmds.add("-p");
    cmds.add("5432");
    cmds.add("-U");
    cmds.add("postegres");
    cmds.add("-F");
    cmds.add("c");
    cmds.add("-b");
    cmds.add("-v");
    cmds.add("-f");
     cmds.add("\"D:\\test.backup\"");
    cmds.add("ma_base");
            try {
                ProcessBuilder pb = new ProcessBuilder(cmds); 
     Map<String, String> env = pb.environment(); 
     env.put("PGPASSWORD", "admin"); 
     Process process = pb.start(); 
            }catch(Exception ex){
            System.out.println(ex);
    }
    Le fichier test.backup se crée à l’endroit indiqué mais le problème est que sa taille est de 0 octets au lieu de la taille normale qui devrait être 44 ko…j’ai besoin de votre aide pour trouver qu’est ce qui ne va pas bien dans mes codes la famille……
    Merci d’avance

  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 804
    Points
    48 804
    Par défaut
    tu dois lire ou fermer les streams standard du process (process.getInput/Output/ErrorStream) sinon une fosi le buffer plein, le process en question attends que quelqu'un lise pour continuer le travail.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    salut Tchize au fait j'ai pas bien compris tes explication...si tu pouvais détailler un peu (avec des codes si possible) sa m'arangerai je t'assure

  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 804
    Points
    48 804
    Par défaut
    Pour faire court, tout process que tu démarre dispose de trois stream (stdin, stdout, stderr), ton application java aussi, et le programme que tu lance avec ProcessBuilder aussi.


    Le système d'exploitation dispose de peu d'espace réservé en mémoire pour stocker ce qu'un programme (B) écrit sur sa sortie standard (sa "console"), et c'est à l'autre programme (A) qui a lancé ce programme de récupérer ce qui est écrit et d'en faire quelque chose. cmd.exe, par exemple, affiche tout cela dans une fenetre noire, avec du texte blanc. Ton programme java doit donc aussi faire cela pour ce que pg_dump sort sur sa "console", il faut en faire quelque chose. Par exemple:

    écrire dans un fichier ce qui arrive de pg_dump
    copier cela dans la console du programme java
    ne rien en faire.

    Quand la mémoire tampon entre les deux programmes est plein, le programme qui écrit (pg_dump dans ton cas) se met en pause, ce que tu remarque en ce moment.

    C'est le même principe pour stderr (erreur standard)
    C'est le même principe en sens inverse pour stdin

    tout ces streams sont accessibles via la variable process que tu possède déjà.

    Alors soit tu fais des threads avec des boucle pour traiter indépendement chacun de ces trois stream, mais c'est long et lourd à coder
    soit tu ferme tous les stream, mais alors tu ne verra pas ce que tente de te dire pg_dump
    soit tu utilise les méthodes bien pratiques de processbuilder:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     ProcessBuilder pb =
       new ProcessBuilder(taCommande);
     pb.redirectOutput(Redirect.INHERIT);
     pb.redirectError(Redirect.INHERIT);
     pb.redirectInput(Redirect.INHERIT);
     Process p = pb.start();
    qui lieront tout simplement les stream de ton programme java aux stream de pg_dump.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Là c'est bien clair...je vais essayer de matérialiser tes conseils et voir c'est que donne...mr6

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Guinée

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Grand merci j'ai pu voir dans la console les erreurs de mon code...au faite le seul grand probleme était just que je devais mettre postgres au lieu de postegres au nom de l'utilisateur....

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/04/2010, 21h16
  2. Problem de connexion d'une servlet avec une base de données Postgres
    Par lhaj-boolean dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 01/02/2010, 09h39
  3. Réponses: 1
    Dernier message: 01/06/2009, 06h48
  4. Sauvegarde d'une base de données 9i avec RMAN 10g
    Par magboom dans le forum Recovery Manager
    Réponses: 2
    Dernier message: 16/10/2008, 10h40
  5. probleme avec une base de donnée postgres SQL
    Par Alexlesilex dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/06/2005, 22h09

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