# DB-Inhalt in JTable



## Vril (2. Aug 2005)

Hallo,

hat jemand zufällig einen kompletten Beispielcode oder eine schöne Anleitung wie man Daten aus einer DB, z.B. Access, in einen JTable bekommt? Super wäre natürlich auch noch wenn sich der JTable automatisch aktualisiert, irgendwie FireDataTableChanged, wenn sich die DB verändert!

Ich weiss, das ist jetzt ziemlich frech gefragt, aber ich hab da jetzt schon so viele Schnipsel gemacht und das klappt alles nicht... Wäre super wenn mir jemand helfen könnte!


----------



## tüdelü (2. Aug 2005)

```
import java.awt.BorderLayout;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

final class ContactTable extends JPanel
{
   public ContactTable(File file)
   {
      try
      {
         setLayout(new BorderLayout());
         readDB(file);
      } catch (FileNotFoundException e)
      {
         e.printStackTrace();
      } catch (JDOMException e)
      {
         e.printStackTrace();
      } catch (IOException e)
      {
         e.printStackTrace();
      }
   }
   SAXBuilder builder;
   Document doc;
   Element root;
   List elements;
   public void readDB(File file) throws FileNotFoundException, JDOMException, IOException
   {
      builder = new SAXBuilder();
      doc = builder.build(new FileReader(file));
      root = doc.getRootElement();
      elements = root.getChildren();
      Object[][] contacts = new Object[elements.size()][7];
      for(int i=0; i<elements.size(); i++)
      {
         Element contact = (Element)elements.get(i);
         contacts[i][0] = contact.getChildTextTrim("name");
         contacts[i][1] = contact.getChildTextTrim("forename");
         contacts[i][2] = contact.getChildTextTrim("street");
         contacts[i][3] = contact.getChildTextTrim("zip");
         contacts[i][4] = contact.getChildTextTrim("private");
         contacts[i][5] = contact.getChildTextTrim("mobile");
         contacts[i][6] = contact.getChildTextTrim("email");
      }
      String[] columns = {"Name", "Vorname", "Strasse", "Ort", "Privat", "Mobil", "E-Mail"};
      JTable contactTable = new JTable(contacts, columns);
      add(new JScrollPane(contactTable));
   }
   public String getListSize()
   {
      return ""+elements.size();
   }
}
```

Zwar keine DB aber XML vielleicht hilfts


----------



## T1M (3. Aug 2005)

hi, ich mach gerad genau das gleiche. daten aus ner db in ne jtable.
habs sogar fast genauso wie tüdelü.
nur bekomm ich ne ArrayIndexOutOfBoundsException.
hier mal code:

```
...
public void getDaten()
	{
		System.out.println("getDaten");

	 String[] columnNames =
	 {
	 		"Station",
            "Name",
	};
	  	  	  
	 //XXXXXXXXXXXXXXXXXXX So oder so ähnlich  XXXXXXXXXXXXXXXXXXXXXXXXXX	
	  	
	  	//DBFrids db = new DBFrids("FRIDS_TEST");
          KreissaalPat[] pats = new KreissaalPat[100];
	  System.out.println("vor getKrs: " + pats);	
	  pats = dbfrids.getKrspat();
	  System.out.println("nach getKrs: " + pats);
	  
	  for (int i=0; i<pats.length; i++)
	  {
	  	data[i][0]= pats[i].getStation();
	  	data[i][1]= pats[i].getName();
	  	}
	  System.out.println("nach for-schleife: " + pats);
	}
...
model = new DefaultTableModel(data, columnNames);
        table = new JTable(model)
		{
	     public Class getColumnClass(int i)
	     {
	     	return Object.class;
	     }
	   };
```
KreissaalPat is ne eigene Klasse. ich nehm mal an, das die exception kommt, weil da was mit pats net stimmt. aber was?


----------



## T1M (3. Aug 2005)

humpf,
habs mal n bissl umgeschrieben. jetzt bekomm ich keinen fehler mehr, allerdings ist das panel, in dem die jtable liegen sollte leer ...
damn it! :?


----------



## Vril (3. Aug 2005)

Also ich habs jetzt mal so hinbekommen, fehlt halt noch ne update Funktion und das Layout ist noch nicht einwandfrei:

```
import java.sql.*;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;

class MyPizzaTableModel extends AbstractTableModel{
	
	private Connection con = null;
	Statement stmt = null;
	
	public void init(){
		try{
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		  con = DriverManager.getConnection(
		  	"jdbc:odbc:;DRIVER=Microsoft Access Driver (*.mdb);DBQ=test"); 
		}	catch (Exception e){
			System.err.println(e);
		}
	}
	
	String SpaltenNamen[] = {"Nr", "Name", "Preis"};
	Vector Spalten [] = {new Vector(), new Vector(), new Vector()};
	
	public void fetchData(){
		try{
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery ("SELECT * FROM test");;
			
			while (rs.next()){
				for (int i = 0; i < SpaltenNamen.length; i++)
				  Spalten[i].addElement (rs.getString (SpaltenNamen[i]));
			}
			stmt.close();
		} catch (SQLException e){
			System.err.println(e);
		}
	}
	public String getColumnName (int column){
		return SpaltenNamen[column];
	}
	public int getColumnCount(){
		return SpaltenNamen.length;
	}
	public int getRowCount(){
		return Spalten[0].size();
	}
	public boolean isCellEditable(int row, int col){
		return false;
	}
	public Object getValueAt(int row, int col){
		return Spalten[col].elementAt(row);
	}
	}
	public class TablePizzaService2 extends JFrame{
		
		public TablePizzaService2 (String ResourceName){
			setDefaultCloseOperation (EXIT_ON_CLOSE);
			setSize(600,200);
			
			MyPizzaTableModel dataModel = new MyPizzaTableModel();
			
			dataModel.init ();
			dataModel.fetchData ();
			
			JTable table = new JTable(dataModel);
			JScrollPane scrollpane = new JScrollPane(table);
			
			JPanel mainPanel = new JPanel();
			mainPanel.add(scrollpane, BorderLayout.CENTER);
			
			getContentPane().add(mainPanel);
			
			setVisible(true);
		}/*
		public static JPanel createTitledPanel(String title){
			JPanel p = new JPanel();
			p.setBorder(
				BorderFactory.createTitledBorder(
					BorderFactory,createEtchedBorder(), title));
			p.setLayout(new BorderLayout());
			return p;
		}*/
		public static void main(String[] args){
			TablePizzaService2 ps = new TablePizzaService2 ("PizzaService");
		}
	
}
```


----------



## T1M (4. Aug 2005)

jep, bei mir tuts jetzt auch!!!


----------

