Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21

Discussione: Dump MySql con java

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305

    Dump MySql con java

    Vi posto il codice, resta in attesa e non termina !!
    codice:
     public static synchronized boolean backupDB(String filename) { 
            String curdir=System.getProperty("user.dir");
            String executeCmd = "mysqldump -u " + user + " -p" + password + " --add-drop-database -B customers "  + " -r " + curdir+
                    File.separator+filename;
            System.out.println(executeCmd);
            Process runtimeProcess;
            try {
     
                runtimeProcess = Runtime.getRuntime().exec(executeCmd);
                int processComplete = runtimeProcess.waitFor();
     
                if (processComplete == 0) {
                    System.out.println("Backup created successfully");
                    return true;
                } else {
                    System.out.println("Could not create the backup");
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
     
            return false;
        }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    Vi posto il codice, resta in attesa e non termina !!
    Il mysqldump genera dell'output su standard-output e/o standard-error? Se ne fa ... lo devi leggere, perché per questioni di buffering il processo può tecnicamente bloccarsi se non viene letto tale output.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Aggiungo che se devi eseguire un comando passandogli dei parametri, allora conviene usare la versione di Runtime.exec() con gli array di String... la versione che prende tutto il comando in una sola stringa a volte può causare dei problemi (purtroppo, già sperimentati).

    Altra cosa: in questo codice stai concatenando due stringhe fisse:

    codice:
    String executeCmd = "mysqldump -u " + user + " -p" + password + " --add-drop-database -B customers "  + " -r " + curdir + File.separator+filename;

    Non è un "errore", è una inefficienza...


    codice:
    String executeCmd = "mysqldump -u " + user + " -p" + password + "  --add-drop-database -B customers -r " + curdir +  File.separator+filename;


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    come faccio a sapere se mysqldump da dell 'output? cioè non ottengo messaggi durante l'esecuzione. Potresti anche essere più chiaro sull'inefficienza . ti ringrazip

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    come faccio a sapere se mysqldump da dell 'output?
    Prova "a mano" da prompt dei comandi e vedi se stampa qualcosa (nota: in generale, solo vedendo dalla console non si riesce a capire se un processo sta scrivendo su stdout o stderr o entrambi, devi provare a redirezionare per capirlo).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    praticamente la query è sbagliata, perchè dopo quel -p legge la password come se fosse il nome del database !! inoltre la password la richiede a runtime!! è per questo che il programma non va avanti!
    In pratica la username deve essere attaccata a -u ovvero -uusername e -ppassword, quando invece stampo vedo -u username -p password
    Ultima modifica di linux_r; 18-02-2014 a 12:43

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Ho appena verificato che scrivendo correttamente la query da cmd.exe essa funziona ma mi esce il seguente messaggio:
    Warning using a password on the command line interface can be insecure.
    Naturalmente la stessa query da java non funziona!!
    codice:
    public static synchronized boolean backupDB(String filename) {
     
            String curdir=System.getProperty("user.dir");
            String [] executeCmd = {"mysqldump ","-u".concat(user)," -p".concat(password)," -B customers > ".concat(filename+".sql")};
            Process runtimeProcess;
            try {
                runtimeProcess = Runtime.getRuntime().exec(executeCmd);
                
                // int processComplete = runtimeProcess.waitFor();
                /* System.out.println(executeCmd);
                if (processComplete == 0) {
                System.out.println("Backup created successfully");
                return true;
                } else {
                System.out.println("Could not create the backup");
                }
                } catch (Exception ex) {
                ex.printStackTrace();
                }*/
            } catch (IOException ex) {
                Logger.getLogger(GestoreClienti.class.getName()).log(Level.SEVERE, null, ex);
            }
     
            return false;
        }
    Ultima modifica di linux_r; 18-02-2014 a 13:09

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    e l'errore è???
    non funziona non vuole dire molto.


    ps il warning è d'obbligo perché scrivi la password in chiaro su una shell (quindi visibile da chiunque)
    RTFM Read That F*** Manual!!!

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    no nessun errore !! se lo faccio da linea di comando come ho già scritto funziona !! esce solo il warning

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    Ho appena verificato che scrivendo correttamente la query da cmd.exe essa funziona ma mi esce il seguente messaggio:
    Warning using a password on the command line interface can be insecure.
    Naturalmente la stessa query da java non funziona!!
    esplicita il "non funziona", hai un errore? resta appeso? cosa? non trova il comando?
    RTFM Read That F*** Manual!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.