tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Johannes7146
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
1651
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    JavaBeginnerDeluxe Tutorials.de Gastzugang
    Hallo,

    ich wuerde gerne das Ergebnis einer SQL-Abfrage (ResultSet) als Textdatei abspeichern.
    Diesbezueglich habe ich hier im Forum schon etwas aufgeschnappt, jedoch besteht da noch ein kleines Problem.
    Nachdem die Textdatei abgespeichert wurde, sind im Text noch eckige Klammern ( - wegen der Array-Liste ?) zu sehen. Diese wuerde ich gerne loswerden.
    Wahrscheinlich liegt es daran, dass ich auf dem Terminal, auf dem ich arbeite, nicht casten kann, weil die Java-Version veraltet ist (ArrayList<String>row = new <String> ArrayList() -->geht nur ohne <String> -Cast bei mir).
    Ich waere euch sehr verbunden, wenn ihr mir weiterhelfen koenntet.

    Hier das Code-Fragment, das ich mir zusammengebastelt habe :
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    
    import java.io.*;
    import java.sql.*;
    import java.util.*;
     
    import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
     
    public class ResultSetWriter {
        
        public static void main(String[] args) throws Exception {
            MysqlDataSource mds = new MysqlDataSource();
            mds.setUser("x");
            mds.setPassword("x");
            mds.setServerName("x");
            mds.setPort(x);
            mds.setDatabaseName("x");
     
            Connection con = mds.getConnection();
     
            Statement stmt = con.createStatement();
     
            ResultSet rs = stmt.executeQuery("Die SELECT-Abfrage");
            ResultSetMetaData rsmd = rs.getMetaData();
            int columnCount = rsmd.getColumnCount();
            
            List rows = new ArrayList();
     
            while (rs.next()){
                  ArrayList row = new ArrayList();
                  for (int i = 1; i <= columnCount ; i++){
                        row.add(rs.getString(i));
                  }
                  rows.add(row);
            }
            rs.close();
            stmt.close();
            con.close();
           
            outputListToFile(rows, new File("Pfad zur Textdatei")); 
        }
        private static void outputListToFile(List list, File file) {
            try {
                PrintWriter printWriter = new PrintWriter(new FileWriter(file));
                Iterator iter = list.iterator();
                while(iter.hasNext() ) {
                    Object o = iter.next();
                    printWriter.println(o);
                }
                printWriter.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
     

  2. #2
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Ich habe mir deinen Code nicht genau angeschaut, weil er nicht in java-Tags eingeschlossen wurde. Trotzdem habe ich zu deinen Aussagen ein paar Bemerkungen zu machen, auch wenn ich nicht weiß, ob sie mit deinem eigentlichen Problem zu tun haben.

    Zitat Zitat von JavaBeginnerDeluxe Beitrag anzeigen
    Wahrscheinlich liegt es daran, dass ich auf dem Terminal, auf dem ich arbeite, nicht casten kann, weil die Java-Version veraltet ist (ArrayList<String>row = new <String> ArrayList() -->geht nur ohne <String> -Cast bei mir).
    Das <String> ist kein Cast, sondern eine Typ-Angabe für eine generische Klasse; ein Cast hat runde Klammern. Dieses Feature objektorientierter Programmierung gibt es (erstaunlicherweise) erst seit Java5; ältere Java-Compiler geben dabei Fehlermeldungen aus. Wenn du also nur Java 1.4 oder eine noch ältere Version hast, solltest du am besten auf eine aktuelle Version upgraden. Außerdem heißt es nicht
    Code java:
    1
    
    ArrayList<String>row = new <String> ArrayList();
    sondern
    Code java:
    1
    
    ArrayList<String>row = new ArrayList<String>();

    Wenn du einen Java-Compiler hast, der noch keine generischen Klassen unterstützt, musst du das von deiner ArrayList gelieferte Objekt erst in seine ursprüngliche Klasse zurückcasten; bei generischen Klassen brauchst du das nicht, weil deren Instanzen bei der Erzeugung für den angegebenen Datentyp spezialisiert sind und deswegen die Objekte auch direkt im richtigen Typ zurückliefern. Deine Ausgabeschleife sollte dann also folgendermaßen aussehen:

    Code java:
    1
    2
    3
    4
    
    while(iter.hasNext() ) {
      String str = (String) iter.next();
      printWriter.println(str);
    }
     
    Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons

    Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.

  3. #3
    JavaBeginnerDeluxe Tutorials.de Gastzugang
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    
    import java.io.*;
    import java.sql.*;
    import java.util.*;
     
    import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
     
    public class ResultSetWriter {
     
    public static void main(String[] args) throws Exception {
    MysqlDataSource mds = new MysqlDataSource();
    mds.setUser("x");
    mds.setPassword("x");
    mds.setServerName("x");
    mds.setPort(x);
    mds.setDatabaseName("x");
     
    Connection con = mds.getConnection();
     
    Statement stmt = con.createStatement();
     
    ResultSet rs = stmt.executeQuery("Die SELECT-Abfrage");
    ResultSetMetaData rsmd = rs.getMetaData();
    int columnCount = rsmd.getColumnCount();
     
    List rows = new ArrayList();
     
    while (rs.next()){
    ArrayList row = new ArrayList();
    for (int i = 1; i <= columnCount ; i++){
    row.add(rs.getString(i));
    }
    rows.add(row);
    }
    rs.close();
    stmt.close();
    con.close();
     
    outputListToFile(rows, new File("Pfad zur Textdatei"));
    }
    private static void outputListToFile(List list, File file) {
    try {
    PrintWriter printWriter = new PrintWriter(new FileWriter(file));
    Iterator iter = list.iterator();
    while(iter.hasNext() ) {
    Object o = iter.next();
    printWriter.println(o);
    }
    printWriter.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }


    Danke fuer die Aufklaerung @ Vereth !
     

  4. #4
    Avatar von Johannes7146
    Johannes7146 Johannes7146 ist offline Goldschnabel
    Registriert seit
    Sep 2007
    Ort
    Gütersloh
    Beiträge
    736
    Hier im Forum gibt es auch eine Danke Funktion.
    Vereth freut sich sicherlich wenn du ihm auf diesem Wege dankst.
    Oder geht das als Gast nicht?
    Vereth bedankt sich. 
    Wenn mein Beitrag dir geholfen hat, würde ich mich sehr über eine positive Bewertung oder ein Danke freuen
    Gruß Johannes
    ::: Homepage :::

Ähnliche Themen

  1. Textdatei durchsuchen ausgeben
    Von knibbel11 im Forum C/C++
    Antworten: 18
    Letzter Beitrag: 24.09.08, 11:50
  2. Komplette Textdatei in PHP ausgeben
    Von Cusco im Forum PHP
    Antworten: 8
    Letzter Beitrag: 10.10.07, 16:53
  3. Textdatei ausgeben
    Von desmina im Forum PHP
    Antworten: 1
    Letzter Beitrag: 28.07.06, 16:21
  4. Antworten: 0
    Letzter Beitrag: 19.03.06, 23:11
  5. Textdatei aus dem I-Net laden und ausgeben
    Von ElFunghi im Forum Visual Basic 6.0
    Antworten: 19
    Letzter Beitrag: 29.11.02, 14:03