Zugriff auf mySQL ohne JDBC

Diskutiere Zugriff auf mySQL ohne JDBC im Allgemeine Java-Themen Forum; hallo Forum, ich habe es vermeiden wollen, alles aufzuschreiben. das wird ein buch aber kein beitrag für ein forum. ich betreibe ein...

  1. Onkel Tom
    Onkel Tom Neues Mitglied
    hallo Forum,

    ich habe es vermeiden wollen, alles aufzuschreiben. das wird ein buch aber kein beitrag für ein forum. ich betreibe ein mySql-system, als Bestandteil einer XAMPP-Distribution.
    nur zur Info, denn das ist ja ein Java-forum und kein mySQL.

    Innerhalb des Mysql gibt es ein Backupsystem, doch das Ding taugt nicht viel.
    Exportieren, also Sichern das geht noch. Doch DB importieren dauert viel zu lange. So kam ich auf ein MySQL-Tool das zuverlässig arbeitet.
    Dennoch suchte ich nach einer zweiten Backup-lösung, kann ja sein, das mir dieses Programm irgendwie verloren geht. So kam ich auf das mySQL-eigene 'mySQLdump.exe', es arbeitet bedeutend schneller.
    Wenn ich mit meinem SQL-Databases arbeite, bin ich an 4 oder 5 oder 6 DB dran,
    und weiß hinter her nicht mehr was ich alles gemacht habe. es kann auch sein,
    das ich keine lust mehr zum sichern habe. ich mach das einen tag später.
    über die bytezahl sieht man das nicht unbedingt. kommt drauf an wieviel man neu eingespeichert hat. außerdem besteht eine DB aus mehreren Tabellen.
    Das sind Fakten, da geht es bereits um mehr, nämlich um eine umfassende Backupkontrolle, bezogen auf Datenbank, bzw. deren Tabellen, updatezeit, datensätze etc.

    Doch das war mir anfangs selber nicht klar. Als erstes wollte ich nichts
    anderes als den backupvorgang besser verwalten. Da der Export-vorgang einigermaßen funkte, kümmerte ich mich um das importieren.
    doch ich begann nicht mit der import.bat sondern mit der export.bat, die ich eigentlich gar nicht brauchte. es erschien mir einfacher zu programmieren.
    aus dem grunde ist die export.bat auch nur für 2 parameter ausgelegt.

    hier ist der text:
    ------------------------------------------

    @echo off
    cls

    rem die datei ist bereits vorhanden
    if exist %1.sql goto write

    if "%1" == "/?" goto version

    rem keine parameter
    if %1/==/ goto hilfe1

    echo Export - Import Tool
    echo.



    :RUN
    echo Exportiere Datenbank %1 %2 !Bedingung mySQl-Server ist gestartet! Break mit CRTL-C
    echo.
    echo.
    %mysql_pfad%/mysqldump.exe --opt -h localhost -u root -p %1 >%1.sql
    echo.
    if "%2" NEQ "" %mysql_pfad%/mysqldump.exe --opt -h localhost -u root -p %2 >%2.sql
    echo.
    dir %1.sql
    if "%2" NEQ "" dir %2.sql

    echo.
    echo Ende 1
    goto halt



    :hilfe1
    echo.
    echo Beachte die Syntax! Aufruf mit "export Datenbank"
    echo -------------------------------------------------
    echo.
    %mysql_pfad%/mysqldump
    echo.
    goto stopp

    :version
    echo Import-Tool für mySQL-Datenbanken
    echo.
    echo Versionsgeschichte EXP.221118_1
    echo Name Export.bat
    echo.
    echo Merkmale und Bedingungen:
    echo ----------------------------------
    echo 1 mySQl-Server starten
    echo 2 arbeitet mit %mysql_pfad% als WindowsUmgebungsvariabel
    echo 3 Programm ist für 2 Datenbanken ausgelegt.
    echo.
    echo Die Programmierung wird geschlossen. Der Batch wird schreibgeschützt.
    goto halt

    :write
    echo.
    if "%1" NEQ "" (
    echo Datei %1.sql vorhanden und wird ueberschrieben bzw. neu erzeugt. Beachte den Zeitstempel von %1.sql
    dir %1.sql )

    if "%2" NEQ "" (
    echo Datei %2.sql vorhanden und wird ueberschrieben bzw. neu erzeugt. Beachte den Zeitstempel von %2.sql
    dir %2.sql )

    goto RUN

    :stopp
    if exist MusterDB.sql Del MusterDB.sql

    echo Muster "mysqldump.exe --opt -h localhost -u root -p MusterDB >MusterDB.sql"
    echo Ende 2
    :halt


    der code funktioniert. danach schrieb ich den import.bat.
    der import.bat kommt ohne java aus, und liegt hier nicht mit bei.
    zu dem Zeitpunkt hatte ich bereits vor etwas anderes zu bauen, denn ich bin wie gesagt an mehr Datenbänken dran. die option '-all Databases' wäre möglich, aber nicht gewollt. ich kam auf java, ein java-programm übergibt seine Argumente an einen batch der vom java-code gerufen wird. der batch startet dann die mysqldump.exe. Ich wußte, daß Java mit speziellen Treibern auf mySQL zugreift. das wollte ich vermeiden, das war mir zu schwierig. das java soll doch gar nicht zugreifen, java brauch ich nur als trägerstruktur.

    hier der text:
    ----------------

    import java.lang.*;
    import java.io.*;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io_OutputStream;
    //import java.util.Timer;
    //import java.util.TimerTask;
    //import java.util.concurrent.TimeoutException;

    //wenn nichts importiert wird, läuft das Ding trotzdem

    class extern42

    {
    public static void main(String[] args) throws Exception
    {
    final String version = "4.1.221218";
    int iges = args.length;
    int i=0;
    String befehl1="";
    System.out.println("TESTPROGRAMM: mySQLdump wird innerhalb von Java mit dem Batch gestartet "+version);
    System.out.println("----------------------------------------------------------------------------------\n\n");

    //System.out.println("Anzahl der Argumente: "+i);

    if (args.length >0)
    ;
    //System.out.println("das Argument : "+args[0]);
    else
    {
    //Abfang Leereingabe
    System.out.println("Beachte die Syntax. 'Exec pgm1 pgm2 ... pgmN'");
    System.exit(0);
    }
    //Shellbefehl: 'mysqldump.exe meineDB --opt -h localhost -u root -p meineDB >meineDB.sql' okay
    //Shellbefehl: 'mysqldump.exe meineDB --opt -h localhost -u root -p meineDB >meineDB.sql' okay, wenn 'exit' als input folgt, um wieder raus zu kommen

    //Shellbefehl 'exp1 meineDB' okay

    //Shellbefehl="cmd /K %mysql_pfad%bin\mysqldump.exe --opt -h localhost -u root -p meineDB >meineDB.sql okay
    //Shellbefehl="cmd /K exp1.bat "; //okay, wenn 'exit' als input folgt, um wieder raus zu kommen
    //in Java
    befehl1="exp1.bat "; //läuft nicht

    //befehl1="cmd /K attrib.exe"; //läuft nicht
    //befehl1="attrib.exe"; //okay
    //befehl1="mysqldump.exe"; //okay
    //rufe auf: 'java extern41 X', mysqldump.exe wird gestartet und bricht natürlich ab., hat keinen wert

    while (i < iges)
    {
    befehl1=befehl1+args+" >"+args+".sql"; //deaktiviere diesen befehl, um befehl1 zu testen
    System.out.println("der auszuführende Befehl: "+befehl1);
    //der Befehl ist in Ordnung: 'mysqldump.exe --opt -h localhost -u root -p b1.jc>b1.jc.sql', das backup wird erzeugt.


    ProcessBuilder pb = new ProcessBuilder(befehl1); //break
    pb.inheritIO(); // <- vererbe stdin/stdout/stderr
    Process p = pb.start();

    //befehl1="D:\\PGM4\\Xampp\\mysql\\bin\\mysqldump.exe --opt -h localhost -u root -p"+" ";
    //muß den Befehl zurücksetzen, doch soweit kommt das Programm mit einer echten DB sowieso nicht,
    p.waitFor();
    i++;
    }

    System.out.println("\n\n");
    System.out.println("ProgrammEnde");
    }

    }

    1. bedingung: der mysqlserver wurde hochgefahren, ohne dem kommt die mysqldump.exe nicht ins system, obwohl es eine eigene passwortabfrage hat
    2. habe eine windowsumgebungsvariable für das mysql\bin verzeichnis, daran liegts nicht

    mein aufruf: java extern41 meineDB

    3.1. Es wird eine IOException geworfen, wahrscheinlich findet Java die Datenbank meineDB nicht, wollte JDBC umgehen. war mir zu schwierig
    - da hat java gar nichts mit zu tun, das macht mysqldump.exe und nicht java. der server ist gestartet, daran liegts nicht.
    - bin sowieso in der shell, der batch muß ablaufen oder abbrechen.
    java hat solange pause.

    3.2. eigentlich wollte ich eine try-catch haben, läßt sich besser programmieren, aber das ist wieder ein fall für sich
     
  2. Vielleicht hilft dir dieses Buch hier weiter.
  3. krgewb
    krgewb Aktives Mitglied
    Bitte immer in code-Tags posten
    Code (Text):

    @echo off
    cls

    rem die datei ist bereits vorhanden
    if exist %1.sql goto write

    if "%1" == "/?" goto version

    rem keine parameter
    if %1/==/ goto hilfe1

    echo Export - Import Tool
    echo.



    :RUN
    echo Exportiere Datenbank %1 %2 !Bedingung mySQl-Server ist gestartet! Break mit CRTL-C
    echo.
    echo.
    %mysql_pfad%/mysqldump.exe --opt -h localhost -u root -p %1 >%1.sql
    echo.
    if "%2" NEQ "" %mysql_pfad%/mysqldump.exe --opt -h localhost -u root -p %2 >%2.sql
    echo.
    dir %1.sql
    if "%2" NEQ "" dir %2.sql

    echo.
    echo Ende 1
    goto halt



    :hilfe1
    echo.
    echo Beachte die Syntax! Aufruf mit "export Datenbank"
    echo -------------------------------------------------
    echo.
    %mysql_pfad%/mysqldump
    echo.
    goto stopp

    :version
    echo Import-Tool für mySQL-Datenbanken
    echo.
    echo Versionsgeschichte EXP.221118_1
    echo Name Export.bat
    echo.
    echo Merkmale und Bedingungen:
    echo ----------------------------------
    echo 1 mySQl-Server starten
    echo 2 arbeitet mit %mysql_pfad% als WindowsUmgebungsvariabel
    echo 3 Programm ist für 2 Datenbanken ausgelegt.
    echo.
    echo Die Programmierung wird geschlossen. Der Batch wird schreibgeschützt.
    goto halt

    :write
    echo.
    if "%1" NEQ "" (
    echo Datei %1.sql vorhanden und wird ueberschrieben bzw. neu erzeugt. Beachte den Zeitstempel von %1.sql
    dir %1.sql )

    if "%2" NEQ "" (
    echo Datei %2.sql vorhanden und wird ueberschrieben bzw. neu erzeugt. Beachte den Zeitstempel von %2.sql
    dir %2.sql )

    goto RUN

    :stopp
    if exist MusterDB.sql Del MusterDB.sql

    echo Muster "mysqldump.exe --opt -h localhost -u root -p MusterDB >MusterDB.sql"
    echo Ende 2
    :halt
     
     
    mihe7 gefällt das.
  4. krgewb
    krgewb Aktives Mitglied
    Code (Java):

    import java.lang.*;
    import java.io.*;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    //import java.util.Timer;
    //import java.util.TimerTask;
    //import java.util.concurrent.TimeoutException;

    //wenn nichts importiert wird, läuft das Ding trotzdem

    class extern42
    {
        public static void main(String[] args) throws Exception
        {
            final String version = "4.1.221218";
            int iges = args.length;
            int i=0;
            String befehl1="";
            System.out.println("TESTPROGRAMM: mySQLdump wird innerhalb von Java mit dem Batch gestartet "+version);
            System.out.println("----------------------------------------------------------------------------------\n\n");

            //System.out.println("Anzahl der Argumente: "+i);

            if (args.length >0)
                ;
                //System.out.println("das Argument : "+args[0]);
            else
            {
                //Abfang Leereingabe
                System.out.println("Beachte die Syntax. 'Exec pgm1 pgm2 ... pgmN'");
                System.exit(0);
            }
            //Shellbefehl: 'mysqldump.exe meineDB --opt -h localhost -u root -p meineDB >meineDB.sql' okay
            //Shellbefehl: 'mysqldump.exe meineDB --opt -h localhost -u root -p meineDB >meineDB.sql' okay, wenn 'exit' als input folgt, um wieder raus zu kommen

            //Shellbefehl 'exp1 meineDB' okay

            //Shellbefehl="cmd /K %mysql_pfad%bin\mysqldump.exe --opt -h localhost -u root -p meineDB >meineDB.sql okay
            //Shellbefehl="cmd /K exp1.bat "; //okay, wenn 'exit' als input folgt, um wieder raus zu kommen
            //in Java
            befehl1="exp1.bat "; //läuft nicht

            //befehl1="cmd /K attrib.exe"; //läuft nicht
            //befehl1="attrib.exe"; //okay
            //befehl1="mysqldump.exe"; //okay
            //rufe auf: 'java extern41 X', mysqldump.exe wird gestartet und bricht natürlich ab., hat keinen wert

            while (i < iges)
            {
                befehl1=befehl1+args+" >"+args+".sql"; //deaktiviere diesen befehl, um befehl1 zu testen
                System.out.println("der auszuführende Befehl: "+befehl1);
                //der Befehl ist in Ordnung: 'mysqldump.exe --opt -h localhost -u root -p b1.jc>b1.jc.sql', das backup wird erzeugt.


                ProcessBuilder pb = new ProcessBuilder(befehl1); //break
                pb.inheritIO(); // <- vererbe stdin/stdout/stderr
                Process p = pb.start();

                //befehl1="D:\\PGM4\\Xampp\\mysql\\bin\\mysqldump.exe --opt -h localhost -u root -p"+" ";
                //muß den Befehl zurücksetzen, doch soweit kommt das Programm mit einer echten DB sowieso nicht,
                p.waitFor();
                i++;
            }

            System.out.println("\n\n");
            System.out.println("ProgrammEnde");
        }

    }
     
    Zuletzt bearbeitet: 29. Dez. 2018
    mihe7 gefällt das.
  5. Wurstkopp
    Wurstkopp Mitglied
    Uff.. eine Menge Text. Also die Batch-Datei/Exe selber kann keine IOException werfen, da sie ja kein Java Programm ist. Es hat also nichts mit deiner Datenbank oder dem Inhalt der Batch-Datei zu tun. Ich denke du bist schlicht im falschen Ausführungspfad und deine relativen Pfade stimmen dann nicht. Du solltest also prüfen ob in deinem execution path wirklich die Datei "mysqldump.exe" liegt. Ansonsten z.B. mal den ProcessBuilder den Pfad mitgeben ( https://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html#directory(java.io.File) ) oder mit absoluten Pfaden arbeiten.
     
  6. Wenn du Java lernen möchtest, empfehlen wir dir dieses Buch hier
Passende Stellenanzeigen aus deiner Region:





Die Seite wird geladen...

Zugriff auf mySQL ohne JDBC - Ähnliche Themen

Java hat keinen Zugriff auf MySQL
Java hat keinen Zugriff auf MySQL im Forum Datenbankprogrammierung
mySQL- Java Application - Zugriff über Internet
mySQL- Java Application - Zugriff über Internet im Forum Datenbankprogrammierung
JavaFX Anwendung zugriff auf MySQL DB.
JavaFX Anwendung zugriff auf MySQL DB. im Forum Datenbankprogrammierung
MySQL Datenbank 2facher Zugriff
MySQL Datenbank 2facher Zugriff im Forum Datenbankprogrammierung
Zugriff auf lokal gespeicherte mySQL Datenbank
Zugriff auf lokal gespeicherte mySQL Datenbank im Forum Datenbankprogrammierung
Thema: Zugriff auf mySQL ohne JDBC