# Exportieren aus MySQL mit Java-Programm



## bertram (12. Okt 2006)

Guten Tag,

ich schreibe gerade einem Java-Programm um auf eine MySQL Datenbank zuzugreifen.
Hierbei sollen auch bestimmte Tabellen aus der MySQL Datenbank in csv Dateien exportiert werden.
Dabei gibt es aber Probleme, wenn ich mir die exportierte csv Datei mit Excel anschaue, sind die Daten nicht in den Spalten aufgeteilt, wie es sein sollte, sondern alle Daten von einem Datensatz sind in einer Spalte.

Ich habe es so realisiert:


```
Statement stmt;
        String query;
        String filename="C:/Downloads/zeichnungsnummernstamm.txt";
        try {
            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
                    ResultSet.CONCUR_UPDATABLE);
            
            //For comma separated file
            query = "SELECT * into OUTFILE  '"+filename+"'FIELDS TERMINATED BY ' , 'FROM zeichnungsnummernstamm";
                    //"' FIELDS TERMINATED BY ',' FROM zeichnungsnummernstamm";
            stmt.executeQuery(query);
            System.out.println("exportiert");
        } catch(Exception e) {
            e.printStackTrace();
            stmt = null;
        }
```

Schon einmal vielen Dank im voraus.

MfG

bertram


----------



## richardkrieger (12. Okt 2006)

Hast du beim Import Excel mitgeteilt, dass du Komma als Trennzeichen nutzt?


----------



## bertram (12. Okt 2006)

Nein, wie kann ich das denn Einstellen?


----------



## richardkrieger (12. Okt 2006)

ich arbeite seit einigen Jahren mit Linux und OpenOffice, also kann ich leider keine Schritt-für-Schritt anleitung geben.

in der Suchmaschiene habe ich folgendes gefunden:
www.pc-magazin.de/praxis/office/a/Importieren_und_exportieren_in_Excel/5254.html
vielleicht hilft es dir weiter


----------



## bertram (12. Okt 2006)

Leider hat es mir nicht weiter geholfen.

Kann ich denn in meinem Programm das Trennzeichen nicht so einstellen, dass es automatisch von Excel erkannt wird?

Das Problem ist ja außerdem, das die Datei erst existiert, nachdem ich sie exportiert habe und ich kann ihr nicht sagen, welches Trennzeichen sie nehmen soll, bevor sie überhaupt existiert.

Trotzdem vielen Dank für deine Bemühungen.

MfG

bertram


----------



## bertram (12. Okt 2006)

Ich habe noch ein weiteres Problem festgestellt.

Wenn ich die Tabelle ein zweites mal exportieren will, bekomme ich die fehlermeldung File already exist, kann mir jemand sagen, wie ich die bereits existierende Datei überschreiben kann?


----------



## richardkrieger (12. Okt 2006)

versuch mal mit RandomAccess. Bei mir funktioniert es mit einer .property-Datei.

Also ich überschreibe Datei nicht. Es wird eine existierende aufgemacht und Inhalt überschrieben. RandomAccess legt, glaube ich, auch eine Datei an, falls die noch nicht existiert.


----------



## Caffè Latte (12. Okt 2006)

Hi,

also ich kenne das nicht anderes, dass ein Doppelklick auf eine CSV-Datei die Datei so öffnet, dass jeder Datensatz in einer Zeile steht (wie bei dir). Über das Menü Datei -> Öffnen geht es allerdings. Genaueres kann ich dir aber nicht sagen, da ich hier nur OOo einsetze.


----------



## richardkrieger (12. Okt 2006)

früher war Semikolon quasi ein Standard-Trennzeichen für CSV. Probier es mal damit - vielleicht erkennt Excel es in beiden Fällen richtig.

Ausserdem wenn ein Nutzer deiner Applikation ohne böse Hintergedanken irgendwo im Text-Datenfeld ein Komma setzt... oder zwei.... oder mehrere....

Ich persönlich, wenn ich mit CSV arbeiten muss nutze "|" als Trennzeichen. Ist ziemlich unwarscheinlich, dass man "|" irgendwo im Text einsetzt. Dann wird aber Excel ein massives Problem damit haben.

Office arbeitet doch mit Visual Basic, wenn ich mich richtig erinnere. Kann man da kein Macro oder so schreiben?


----------



## bertram (4. Jan 2007)

Hi,

ich schreibe gerade ein Programm in Java, mit dem ich auf eine MySQL Datenbank zugreife.
An einer Stelle des Programms, muss eine Tabelle exportiert werden, das klappt auch ganz gut, eine csv Datei wird erstellt und mit den Daten gefüllt.
Das Problem liegt darin, das diese Datei immer auf den Server abgespeichert wird, sie soll aber auf den Client Rechner, von dem die DB aus angesteuert wird, gespeichert werden.

Hier mal mein Quellcode:


```
try
{
     System.out.println("* Verbindung aufbauen");
     String url = "jdbc:mysql://"+hostname+":"+port+"/"+dbname;
     conn = DriverManager.getConnection(url, user, pw);
}
catch (SQLException sqle)
{
     JOptionPane.showMessageDialog(null,"Unable to load driver","Fehler",JOptionPane.ERROR_MESSAGE);
}

Statement stmt;
String query;
String filename=jTextField1.getText()+jTextField2.getText();   

try
{
     stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
     query = "SELECT * into OUTFILE '"+filename+"'FIELDS TERMINATED BY ';' FROM alle_auftraege";
     stmt.executeQuery(query);
     System.out.println("exportiert");
     dispose();
}
catch(Exception e)
{
     JOptionPane.showMessageDialog(null, "SQLException:
     "+e.getMessage(),"Warnung",JOptionPane.WARNING_MESSAGE);
     e.printStackTrace();
     stmt = null;
}
```

Was muss ich an diesen Quellcode ändern, damit die Datei nicht auf dem Server sondern beim Client abgespeichert wird.

Schon einmal vielen Dank im voraus.

MfG

bertram

P.S. Ein frohes neues Jahr


----------



## Caffè Latte (4. Jan 2007)

Hi,

dieses "SELECT ... INTO OUTFILE ..." exportiert IMHO immer auf den Server. Du hast ja keinen Zugriff von dort auf dein lokales Dateisystem.

Ich würde einfach den ResultSet auslesen und dann in einer Datei speichern.

Code, den du ggf. nutzen kannst hatte ich hier gepostet: http://www.java-forum.org/de/viewtopic.php?t=36290

Hoffe es hilft ...


----------



## Yzebär (4. Jan 2007)

Öffne mal die csv-Datei in Excel unter Daten>>Externe Daten>>Textdatei importieren da kannst du das Trennzeichen einstellen (Datei auswählen >> Radiobutton auf "Getrennt" stellen und dann auf "Weiter" klicken).


----------

