# Daten aus MySQL datenbank auslesen und in ArrayList stecken



## hamburger_1983 (10. Sep 2007)

Hallo,

habe folgendes Problem:


```
public Kunde dbout() throws java.sql.SQLException, ClassNotFoundException {
		Class.forName("com.mysql.jdbc.Driver");

		String dbHost = "jdbc:.....";
		String dbUser = "....";
		String dbPass = "...."

		Connection conn = DriverManager.getConnection(dbHost, dbUser, dbPass);

		Statement stmt = conn.createStatement();
 
		String abfrageK1 = "SELECT * FROM kunde";

		ResultSet resultK1 = stmt.executeQuery(abfrageK1);
		
		ArrayList<Kunde> list = new ArrayList<Kunde>();
		
		Kunde k1 = new Kunde();
		while(resultK1.next()) {
			k1.setNachname(resultK1.getString("kunde.nachname"));
			k1.setVorname(resultK1.getString("kunde.vorname"));
		}
		list.add(k1);
		return list;
	}
```

Ich möchte im Prinzip nur ein return am Ende haben, dass mir nicht k1 ausgibt (das habe ich schon vorher hinbekommen). Durch die Veränderung auf ArrayList möchte ich jetzt ein return haben, der mir list zurückgibt.


----------



## ms (10. Sep 2007)

```
public Kunde dbout() throws java.sql.SQLException, ClassNotFoundException {
...
```
Dann sollte deine Methode auch eine List zurückgeben.

ms


----------



## tuxedo (10. Sep 2007)

```
ArrayList<Kunde> list = new ArrayList<Kunde>();
      while(resultK1.next()) {
         Kunde k1 = new Kunde();
      
         k1.setNachname(resultK1.getString("kunde.nachname"));
         k1.setVorname(resultK1.getString("kunde.vorname"));
         list.add(k1);
      }
      
      return list;
```

Besser wäre es dann natürlich, wenn du den Namen des Kunden schon über den Konstruktur anlegen kannst. Dann sparst du dir ein paar zeilen und könntest


```
list.add(new Kunde(resultK1.getString("kunde.nachname"), resultK1.getString("kunde.vorname"));
```

machen.

- Alex


----------



## Murray (10. Sep 2007)

```
public List<Kunde> dbout() throws java.sql.SQLException, ClassNotFoundException {
```


----------



## hamburger_1983 (10. Sep 2007)

```
public List<Kunde> dbout() throws java.sql.SQLException, ClassNotFoundException {
```

Die Idee hatte ich auch schon. Nur irgendwie scheint das nicht mit dem nachfolgendem Code zu harmonieren:


```
public MyFrame()  {
		super("Juchu - Ich habe ein Fenster");
		try {
		
		setSize(300, 500);
		setLocation(300, 300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		getContentPane().setLayout(new BorderLayout(5, 5));

		Kunde k1 = dbout();

		// Tabelle erzeugen
		Object[][] table = new Object[4][2];

		Object[] kundeRow = new Object[2];
		kundeRow[0] = k1.getVorname();
		kundeRow[1] = k1.getNachname();

		table[0] = kundeRow;

		String[] spaltenNamen = { "Vorname", "Nachname", "Strasse", "Ort", "Land", "Telefon" };
		tabelle = new JTable(table, spaltenNamen);
		tabelle.setPreferredScrollableViewportSize(new Dimension(400, 60));

		// Panels erzeugen
		panelList = new JPanel(new GridLayout(1, 1));

		// auf Panel Liste packen
		add(tabelle, BorderLayout.CENTER);
		add(tabelle.getTableHeader(), BorderLayout.NORTH);

		pack();
		setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
```

OK, hätte ich evtl. gleich mitposten sollen


----------



## hamburger_1983 (10. Sep 2007)

Hier jetzt nochmal der komplette Code

```
package de.bws.fabian.data;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.*;

public class MyFrame extends JFrame {
	private JPanel panelList;

	private JTable tabelle;

	public static void main(String args[])  {
		MyFrame g = new MyFrame();
	}

public Kunde dbout() throws java.sql.SQLException, ClassNotFoundException {
      Class.forName("com.mysql.jdbc.Driver");

      String dbHost = "jdbc:.....";
      String dbUser = "....";
      String dbPass = "...."

      Connection conn = DriverManager.getConnection(dbHost, dbUser, dbPass);

      Statement stmt = conn.createStatement();

      String abfrageK1 = "SELECT * FROM kunde";

      ResultSet resultK1 = stmt.executeQuery(abfrageK1);
      
      ArrayList<Kunde> list = new ArrayList<Kunde>();
      
      Kunde k1 = new Kunde();
      while(resultK1.next()) {
         k1.setNachname(resultK1.getString("kunde.nachname"));
         k1.setVorname(resultK1.getString("kunde.vorname"));
      }
      list.add(k1);
      return list;
   }

public MyFrame()  {
      super("Juchu - Ich habe ein Fenster");
      try {
      
      setSize(300, 500);
      setLocation(300, 300);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      getContentPane().setLayout(new BorderLayout(5, 5));

      Kunde k1 = dbout();

      // Tabelle erzeugen
      Object[][] table = new Object[4][2];

      Object[] kundeRow = new Object[2];
      kundeRow[0] = k1.getVorname();
      kundeRow[1] = k1.getNachname();

      table[0] = kundeRow;

      String[] spaltenNamen = { "Vorname", "Nachname", "Strasse", "Ort", "Land", "Telefon" };
      tabelle = new JTable(table, spaltenNamen);
      tabelle.setPreferredScrollableViewportSize(new Dimension(400, 60));

      // Panels erzeugen
      panelList = new JPanel(new GridLayout(1, 1));

      // auf Panel Liste packen
      add(tabelle, BorderLayout.CENTER);
      add(tabelle.getTableHeader(), BorderLayout.NORTH);

      pack();
      setVisible(true);
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
```


----------



## tuxedo (10. Sep 2007)

Du held....
Hast du überhaupt nen Plan was du da machst? Ehrlich. Wenn dbout() eine List zurückgeben soll, dann musst du die Rückgabe auch  in eine passende List stecken und nicht versuchen das ganze in "Kunde" zu stecken:

Siehe Zeile 11 deines Codes:

```
Kunde k1 = dbout();
```

- Alex


----------



## ms (10. Sep 2007)

Was sagt denn dein Compiler genau?

ms


----------



## hamburger_1983 (10. Sep 2007)

Ok, habe die Lösung gefunden.

Zeile 11 war wirklich noch fehlerhaft


```
List<Kunde> kundeList = dbout();
```

und der Fehler lag in der Anzeige MyFrame()


```
Object[][] table = new Object[kundeList.size()][6];
int i=0;
for (Kunde k1:kundeList) {
Object[] kundeRow = new Object[6];
kundeRow[0] = k1.getVorname()
kundeRow[1] = k1.getNachname();
table[i] = kundeRow;
i++;
```


----------

