ResultSet als Textdatei ausgeben

J

JavaBeginnerDeluxe

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 :
Java:
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();
        }
    }
}
 
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.

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
Java:
ArrayList<String>row = new <String> ArrayList();
sondern
Java:
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:

Java:
while(iter.hasNext() ) {
  String str = (String) iter.next();
  printWriter.println(str);
}
 
Java:
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 !
 
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?
 

Neue Beiträge

Zurück