# JTable mit Datenbankinhalt befüllen



## erdmulch (1. Dez 2011)

Hallo zusammen,

kann mir jemand sagen wie ich mit Hilfe einer array Liste die Daten von der Klasse "DataBase" ind die Klasse "TableDaten" bekomme?

Danke im voraus



```
import javax.swing.table.AbstractTableModel;



public class TableDaten extends AbstractTableModel
{
	String[] spaltenNamen = {"Nr.", "Titel", "Author", "verlag", "ISBN", "Kategorie", "Fach-Nr."};
	Object[][] daten = new Object [3][7];
	
	public int getRowCount()
	{
		return daten.length;
	}
	
	public int getColumnCount()
	{
		return spaltenNamen.length;
	}
	
	public String getColumnName(int num)
	{
		return spaltenNamen[num];
	}
	
	public boolean isCellEditable(int x, int y)
	{
		return false;
	}
	
	public Object getValueAt(int x, int y)
	{
		return daten [x][y];
	}
	
	public void setValueAt(Object obj, int x, int y)
	{
		daten[x][y] = obj;
		fireTableDataChanged();
	}
	
	
	
	
}
```



```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DataBase 
{
	public DataBase()
	{
		try 
		{
	     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
	    }
		
	    catch (ClassNotFoundException e)
	    {
	        System.out.println("Fehler bei JDBC-ODBC-Brücke");
	    }
	    
	    try 
	    {
	        Connection con = DriverManager.getConnection( "jdbc:odbc:Access","","");
	        Statement stmt = con.createStatement();
	        String query = "SELECT Titel FROM buechertabelle;" ;
	        ResultSet rs = stmt.executeQuery(query);
	        while (rs.next())
	        	System.out.println(rs.getString(1));

	    }
  
	    catch (SQLException s) 
	    {
	        System.out.println("DB-Verbindungsfehler: " + s);
	    }
	}

}
```


----------



## Final_Striker (1. Dez 2011)

erdmulch hat gesagt.:


> Hallo zusammen,
> 
> kann mir jemand sagen wie ich mit Hilfe einer array Liste die Daten von der Klasse "DataBase" ind die Klasse "TableDaten" bekomme?



Mit der Methode 
	
	
	
	





```
setValueAt(Object obj, int x, int y)
```
.

Oder was meinst du genau?


----------



## stikio (1. Dez 2011)

arbeite mit vector ;-)


```
Vector<String> columnNames = new Vector<String>();
    Vector<Vector<Object>> data = new Vector<Vector<Object>>();
```

Diese befüllst du dann durch deine SQL abfrage und weist sie später dem JTable zu


```
table = new JTable(data, columnNames);
scrollPane.setViewportView(table);
```


----------



## ARadauer (1. Dez 2011)

Nein ein Vector ist eher veralltet, mach dir eine Arrayliste mit eigenen Objekten die die Zeile in der Datenbank darstellen.

Das nimmst du dann statt deinem data array. Nach dem setzen der Liste rufst du ein fireTableDataChanged des Model auf und die Tabelle sollte sich neuzeichnen...


----------



## Michael... (1. Dez 2011)

Ich würde mich da ARadauer anschließen. Passe Dein TableModel an, halte die Daten in einer ArrayList gefüllt mit eigenen Objekten. Erweitere das Model um eine Methode setData(List<MyObject> data), mit der Du die Daten aus der DB Abfrage übergeben kannst.

Ausserdem würde ich in der setValueAt(...) nicht jedesmal behaupten, dass sich die kompletten Daten geändert haben ;-) einfach nur 
	
	
	
	





```
fireTableCellUpdated(row, column);
```
 aufrufen.


----------

