Zugriff auf mySQL ohne JDBC

Onkel Tom

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
 

krgewb

Top Contributor
Bitte immer in code-Tags posten
Code:
@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
 

krgewb

Top Contributor
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:

Wurstkopp

Bekanntes 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.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
LucasGlockner Effizienter byte-Zugriff auf ein long[]-Array Allgemeine Java-Themen 8
W Klassen Zugriff auf ein Textfile aus allen Klassen. Allgemeine Java-Themen 2
izoards Zugriff auf gemeinsame Ressource (CSV-File) Allgemeine Java-Themen 3
S Java Zugriff auf Netzwerklaufwerk Allgemeine Java-Themen 1
sascha-sphw Java 9 module Zugriff auf eine resource einer anderen JAR Allgemeine Java-Themen 0
KeexZDeveoper Zugriff auf Methoden vom Server Allgemeine Java-Themen 7
P Element einer Liste wurde hinzugefügt, aber es gibt keinen Zugriff Allgemeine Java-Themen 2
B Maven Zugriff auf files aus einem kompilierten jar Allgemeine Java-Themen 15
S Zugriff auf jUnit Test Suite Runner-Instanzen innerhalb von Test Classes Allgemeine Java-Themen 7
W Zugriff auf Objektvariablen vs. Übergabe Allgemeine Java-Themen 3
J Zugriff auf erstellte Objekte einer Klasse von einer Klasse ausserhalb Allgemeine Java-Themen 3
Tommy Nightmare HTTP Zugriff auf Internetseite im Loginbereich Allgemeine Java-Themen 5
H Zugriff auf PHP Allgemeine Java-Themen 4
B DB-Zugriff einer Webanwendung funktioniert nicht mit Java 7 Allgemeine Java-Themen 2
M WebService - Zugriff auf Webservice Methode über Browser Allgemeine Java-Themen 1
O JNA Zugriff auf Funktion aus DLL Allgemeine Java-Themen 0
O Zugriff auf Windows Zertifikatstore Allgemeine Java-Themen 2
M Kein Zugriff auf microSD Karten Allgemeine Java-Themen 4
T Zugriff auf Datenbank Allgemeine Java-Themen 1
J Zugriff auf IMAP GMail Konto scheitert. Allgemeine Java-Themen 2
P Frontend- Zugriff auf WS- Backend Allgemeine Java-Themen 0
U Zugriff auf Datei sperren Allgemeine Java-Themen 5
N Best Practice Semi-Synchronized Zugriff Allgemeine Java-Themen 0
C Zugriff auf Event felder Allgemeine Java-Themen 0
M Threads synchroner Zugriff (add/delete/read) auf eine Liste Allgemeine Java-Themen 6
F Zugriff Verweigert bei Kopieroperation? Allgemeine Java-Themen 4
T JNI: kein Zugriff auf VM in Callback-Methode eines Windows-Hooks Allgemeine Java-Themen 3
S Dynamischer Zugriff Allgemeine Java-Themen 4
Minonos Einem Programm Zugriff auf bestimmte Ordner geben Allgemeine Java-Themen 5
E Zugriff auf Dateien im Filesystem überwachen Allgemeine Java-Themen 5
H Programierstil: static - Zugriff vs. Staticzugriff Allgemeine Java-Themen 24
V Zugriff auf den Objekterzeuger? Allgemeine Java-Themen 4
M Zugriff zweier Threads auf diesselbe Methode Allgemeine Java-Themen 16
B Zugriff auf eine HashMap Allgemeine Java-Themen 4
B JApplet Zugriff auf Local Storage des Browser? Allgemeine Java-Themen 2
D Zugriff auf Array-Liste Allgemeine Java-Themen 19
M gleichzeitiger Zugriff auf eine Textdatei Allgemeine Java-Themen 6
D Eclipse Kein Zugriff auf Inhalt einer referenzierten .jar Allgemeine Java-Themen 5
B synchronisierter zugriff auf Objekt Allgemeine Java-Themen 6
nutellastulle Zugriff, Übergabe, Bearbeitung und Ausgabe von Jlist Allgemeine Java-Themen 6
U Große Liste von Strings mit indiziertem Zugriff Allgemeine Java-Themen 31
J XML Element Zugriff Allgemeine Java-Themen 4
P Daten kopieren mit nio - Zugriff verweigert Allgemeine Java-Themen 8
M Klassen Zugriff auf getMethode ohne Klasse zu erzeugen Allgemeine Java-Themen 6
A Input/Output Applet-Zugriff auf PHP-Schnittstelle (externer Server) Allgemeine Java-Themen 22
H Vererbung Abgeleitete Klassen und Zugriff Allgemeine Java-Themen 2
C Probleme mit dem Zugriff auf private Methode per reflection Allgemeine Java-Themen 2
J Zugriff auf Poker-Client Fenster Allgemeine Java-Themen 14
C Zugriff auf private Methode per reflection geht nicht mehr Allgemeine Java-Themen 3
S Zugriff auf innere Klasse Allgemeine Java-Themen 3
D Kein Zugriff auf WebService ausser localhost Allgemeine Java-Themen 4
Sonecc Zugriff auf Class File einer anderen Jar während der Laufzeit Allgemeine Java-Themen 2
J Zugriff auf Dateien auf einem shared Folder? Allgemeine Java-Themen 3
H Zugriff auf VBA in Java Allgemeine Java-Themen 2
Haave Audio Device Unavailable: Kein gleichzeitiger Zugriff auf Soundsystem möglich Allgemeine Java-Themen 7
G Letzter Zugriff auf Datei Allgemeine Java-Themen 5
C java.io.FileNotFoundException: (Zugriff verweigert) Allgemeine Java-Themen 14
O Zugriff auf Serielle Schnittstelle - Keine Ports gefunden. Allgemeine Java-Themen 8
C Webstart: Zugriff auf lokale Dateien? Allgemeine Java-Themen 2
X Zugriff auf ComboBoxen in Hauptklasse von zweiter Klasse aus Allgemeine Java-Themen 8
J Zugriff auf gemeinsame Funktionen Allgemeine Java-Themen 4
Airwolf89 Zugriff auf ArrayList<ArrayList> Allgemeine Java-Themen 3
Airwolf89 Zugriff auf Werte in ArrayList<ArrayList> Allgemeine Java-Themen 4
T Zugriff zwischen Klassen für repaint Allgemeine Java-Themen 7
N Zugriff auf eine Referenzvar. Allgemeine Java-Themen 3
S Zugriff auf Klasse Allgemeine Java-Themen 4
Meldanor Mehrdimensionale Arrays : Zugriff auf n-tes Array Allgemeine Java-Themen 5
E JNA:Zugriff auf Common-Block von Fortran bzw. Struct in C Allgemeine Java-Themen 2
T Zugriff auf Singleton verkürzen - Namespaces?? Allgemeine Java-Themen 20
L Zugriff auf ein Objekt mit mehreren Threads Allgemeine Java-Themen 11
Airwolf89 dynamischer Zugriff auf Variablen/ Objekte Allgemeine Java-Themen 4
S Zugriff auf einzelne Bildpunkte Allgemeine Java-Themen 3
D Referenzen weiterreichen vs. statischer Zugriff Allgemeine Java-Themen 3
V Zugriff auf Default-Package? Allgemeine Java-Themen 6
P RegeEx-Problem: Zugriff auf group Allgemeine Java-Themen 2
M Zugriff auf Parallel-Schnittstelle Allgemeine Java-Themen 2
B Zugriff mit einem Applet auf den Datenträger Allgemeine Java-Themen 11
S Innere Klasse: Zugriff auf äußere Variable Allgemeine Java-Themen 5
I Zugriff auf Daten Allgemeine Java-Themen 5
T Zugriff per Reflection o.ä. möglich? Allgemeine Java-Themen 18
D Zugriff auf Windows Dienste Allgemeine Java-Themen 7
G Zugriff auf Memberclasses einer geladenen Class-Datei Allgemeine Java-Themen 2
I Gleichzeitiger zugriff auf ein Long über Threads Allgemeine Java-Themen 2
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
J Kein Zugriff auf Klassen im Default Package Allgemeine Java-Themen 8
M Paralleler Zugriff auf statische Methode Allgemeine Java-Themen 5
S Zugriff auf unterschiedliche JREs Allgemeine Java-Themen 7
M "Unzulässiger Zugriff auf einen Speicherbereich" Allgemeine Java-Themen 7
A Zugriff auf Parallelport nur über Eclipse nicht über .jar ! Allgemeine Java-Themen 12
G Zugriff auf ein sama share Allgemeine Java-Themen 8
J Java zugriff auf Exchange Server Allgemeine Java-Themen 10
D eclipse: Zugriff auf Ordner per code Allgemeine Java-Themen 4
O Konkurrierender Zugriff auf Log-Datei mit Log4J Allgemeine Java-Themen 11
Caracasa [Threads] Gleichzeitiger Zugriff auf eine LinkedList Allgemeine Java-Themen 9
L Zugriff auf Objekt das sich in einer Liste befindet Allgemeine Java-Themen 2
J Zugriff auf den Namen einer Variablen Allgemeine Java-Themen 7
J Zugriff auf Map in anderer Klasse Allgemeine Java-Themen 2
J Endlosschleife durch wechselseitigen Zugriff zweier Klassen? Allgemeine Java-Themen 2
F Zugriff auf lokalen Rechner wer weiss Rat ? Allgemeine Java-Themen 16
G Zugriff auf Dateien in jar-Datei Allgemeine Java-Themen 13

Ähnliche Java Themen


Oben