# Daten aus Datenbank ins JTable einfügen



## MASTERmind (29. Apr 2005)

Moin!
Mittlerweile klappt das mit der JTable, allerdings erzeugt er zwei mal den gleichen Datensatz in der JTable, gibt aber in der Konsole zwei unterschiedliche richtige Datensätze aus.

Werde das hier schliessen und in JDBC neu öffnen, da kein Swing Problem mehr!


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

public class Finanzanalyse extends JFrame implements ActionListener
{
 JLabel header;
 JLabel fehlerMeldung;
 JButton connect;
 static JTable table;
 static Vector vec;
 private Container con;

 String ausgabe;

 String[] titels;

 static DefaultTableModel model;

 public Finanzanalyse()
 {
  super("Daten aus der Datenbank saugen ...");
  con = getContentPane();

  titels = new String[]{"Umsaetze"};
  model = new DefaultTableModel(titels, 0);

  table = new JTable(model);

  vec = new Vector();

  connect = new JButton("saugen ");


  header = new JLabel("Daten Anzeige");
  fehlerMeldung = new JLabel("Fehler" );
  fehlerMeldung.setVisible(false);

  JPanel layoutPanel = new JPanel();
  layoutPanel.setLayout( new BoxLayout( layoutPanel, BoxLayout.Y_AXIS) );
  layoutPanel.add(header);
  layoutPanel.add(connect);

  layoutPanel.add( new JScrollPane( table ) );
  layoutPanel.add(fehlerMeldung);

  con.add(layoutPanel);
  connect.setActionCommand("saugen");
  connect.addActionListener(this);
 }

        public void actionPerformed(ActionEvent a)
        {

            if(a.getActionCommand().equals("saugen"))
            {
                try
                {
                  datenSaugenMethode();
                }
                catch (SQLException e)
                {
                    fehlerMeldung.setVisible(true);
                    System.out.println(e);
                }
                catch (ClassNotFoundException e)
                {
                    throw new RuntimeException(e);
                }
            }
        }

 public void datenSaugenMethode()throws SQLException, ClassNotFoundException
 {
  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  String url = "jdbc:odbc:PostgreSQL";
  Connection con = DriverManager.getConnection(url, "user", "passwd");

  PreparedStatement st = con.prepareStatement("Select umsatz from finanzdaten");

  ResultSet rs = st.executeQuery();

  int numCols = rs.getMetaData().getColumnCount();

  while(rs.next())
  {
   for(int j = 1; j <= numCols; j++)
   {
             ausgabe = (rs.getString(j) + "");
             System.out.println(ausgabe);

   }
   vec.addElement(ausgabe);
   model.addRow(vec);
  }
   //System.out.println(vec.toString());
   
   st.close();
   //rs.close();
   con.close();
 }

 public static void main(String args[]) throws SQLException, ClassNotFoundException
 {
  Finanzanalyse app = new Finanzanalyse();
  app.setDefaultCloseOperation(EXIT_ON_CLOSE);
  app.setSize(200,200);
  app.setVisible(true);
 }
}
```


----------



## bellmann29 (29. Apr 2005)

Hallo,

habe lange nicht mehr mit JTable gearbeitet aber gibt es nicht so etwas wie "setData()", glaube mal etwas wie eine zweidimensionales Array gesehen zu haben.

Sie Dir bitte mal die Methoden von JTable genauer an. Und immer schön die API lesen. Meist stehen dort die notwendigen Beispiele auch drin. Nicht nur die Methoden-namen.

Tip: Erst die Ergebnisse in Vector(machst Du ja), Connection schließen (Du hast ja alles im Vector), danach die Ergebnisse in die Table schmeissen, nicht so lange die Connection offen lassen.

Viel Erfolg.


----------



## bellmann29 (29. Apr 2005)

Sorry,

das mit dem zweidimensionalen Array war im TableModel. Vergib mir.

Hier ein Link zum Java-Tutorial. Sun hat sehr gute Tutorials zum lernen. Sie immer erst dort nach wenn Du etwas suchst oder in der Api, dort hättest Du den Link zum Tutorial auch gefunden.

java.sun.com/docs/books/tutorial/uiswing/components/table.html

Hier findest Du unter TableModel dann was ich meinte.

Nochmals, viel Erfolg.


----------



## MASTERmind (29. Apr 2005)

das problem ist nicht die JTable, sondern dass er mir in der Konsole die zwei Werte aus der DB richtig schreibt und in die JTable aber zwei mal den gleichen Daten satz anlegt.

Ich hab keine Ahnung, ob das an meinem TableModel liegt oder an der Tatsache, wie ich die Datensätze im vec speicher und dann ins Table Model einfüge..

Ist halt komisch, dass es in der Konsole geht!

Konsole: <== so i.O.                  
1234
9999                                          

JTable
1234
1234


----------



## bellmann29 (29. Apr 2005)

Hast Du das Code-Fragment oben verändert?

Habe das Gefühl, das dort was anderes stand.

Naja, egal.

Frage: Wenn die Daten auf der Konsole richtig ausgegeben werden, nur in der JTable nicht richtig erscheinen, glaubst Du wirklich, es handelt sich dann um ein JDBC-Problem?

Ich denke nicht, die Daten hast Du, handle sie nur richtig. Du hast ein Swing-Problem kein JDBC-Problem.

Bis dann.


----------

