kaymanhey
Goto Top

Mehrdimensionale ArrayList zu CSV exportieren

Hi =)
Ich habe mir eine Datenstruktur gebaut die eine Mehrdimensionale ArrayList befüllt.
Nun habe ich mich allerdings irgendwie mit der Logik verzettelt und komm nicht drauf wie ich das am besten in eine CSV-Datei ausgebe.
Größtes Problem dabei ist, die Mehrdimensionale ArrayList als String zu übergeben, da die "write"-Funktion vom BufferedWriter nichts anderes zulässt. Lustigerweise sagt er mir, wenn ich einen String übergeben will, dass der Wert ein Integer sein muss - was quatsch ist... Ich versteh es nicht wirklich
Aufgabe ist es, Daten aus einer Datenbank in einer bestimmten Form in eine CSV-Datei zu exportieren.
Das Programm befindet sich in der im Beispiel folgenden Form, noch im Anfangsstadium


import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.io.*;

//import java.lang.Object;
//import com.csvreader.*;


public class Abfrage {
	
	public static void main (String args) throws IOException{		
		
		String cmd = null;
		int counter = 0;
		Connection con1 = null;
		List< List<String>> list1 = new ArrayList< List<String>>();

		//Datenbank Treiber laden
		try{
			Class.forName("com.informix.jdbc.IfxDriver");  
		}catch(Exception e){
			System.out.println("ERROR: failed to load Informix JDBC driver.");  
		}
		
		//Datenbankzugang - qm_milch - URL - Connection
		try{
			con1 = DriverManager.getConnection("DATENBANK_URL");  
			con1.setReadOnly(true);
		}catch(SQLException e){
			System.out.println("Error: Failed to connect1\n" + e.getMessage());  
		}
		
/*		//Datenbankzugang - vvvo - URL - Connection
		try{
			con2 = DriverManager.getConnection("DATENBANK_URL"); 
			con2.setReadOnly(true);
		}catch(SQLException e){
			System.out.println("Error: Failed to connect2\n" ); 
			e.printStackTrace(System.err);
		}*/
		
		
		//QM_milch Daten
		try{
			Statement stmt1 = con1.createStatement();
			cmd= "qm_milch;";  
			ResultSet rs1 = stmt1.executeQuery("select name1, lief_nr, strasse, plz, ort, vvvo_nr from lieferanten");  
			String daten1;
			daten1 = new String[9999];
			FileWriter foutputstream = new FileWriter("lieferanten.csv");  
			BufferedWriter out1 = new BufferedWriter(foutputstream);
			int columnCount = rs1.getMetaData().getColumnCount();
			
			while(rs1.next()){
				list1.add(new ArrayList<String>());
				
				
				for(int i=0; i < rs1.getMetaData().getColumnCount(); i++){
					String strtmp = rs1.getString(i+1);
					
					if (strtmp != null) {
						strtmp = strtmp.trim();
					}
					
					list1.get(counter).add(strtmp);
					
					if (list1.get(counter).get(i) != null) {
						System.out.printf("%40s", list1.get(counter).get(i));						  
					}
				}
				System.out.println();
				counter++;				
			}			
			
			out1.close();
			con1.close();
			rs1.close();
			stmt1.close();
		}catch(SQLException e){
			System.err.println("ERROR: execution failed - statement " + cmd);  
			System.err.println("ERROR: " + e.getMessage());  
			e.printStackTrace(System.err);
		}
	}
}


Es wär super, wenn mir da jemand helfen könnte =)

Content-Key: 274120

Url: https://administrator.de/contentid/274120

Printed on: April 16, 2024 at 23:04 o'clock

Member: Friemler
Friemler Jun 09, 2015 updated at 13:14:56 (UTC)
Goto Top
Hallo KayManHey,

ich habe Deinen Quelltext nicht analysiert sondern mir nur mal die Doku zur BufferedWriter-Klasse angeschaut.

Die write-Methode der BufferedWriter-Klasse ist überladen. Wenn Du nur EIN Argument übergibst, sieht das für den Compiler so aus, als ob Du folgende Überladung verwenden möchtest:
write(int c)
Deswegen auch die Fehlermeldung, dass ein int-Argument erwartet wird.

Du musst zum Schreiben eines Strings stattdessen die folgende Überladung verwenden:
write(String s, int off, int len)

Siehe auch die Doku zur BufferedWriter-Klasse.

Gruß
Friemler
Member: KayManHey
KayManHey Jun 09, 2015 at 13:29:46 (UTC)
Goto Top
Vielen Dank Friemler, daran hatte ich gar nicht gedacht.
Betreffend der anderen Problemchen, habe ich es gelöst^^
Falls sich jemand für die Lösung interessiert, kann er dies hier ja noch einmal kundtun =)

Vielen Dank