# JTable mit Daten aus Datenbank füllen



## JimK (24. Okt 2011)

Hallo liebes Forum,

warum zeigt mein JTable die Daten aus meiner Datenbank nicht an? Der Header wird ausgegeben, aber der Rest nicht. 


```
package DB;

import java.awt.event.KeyEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Event;
import java.awt.BorderLayout;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.KeyStroke;
import java.awt.Point;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JMenuItem;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JFrame;
import javax.swing.JDialog;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class Oberflaeche {

	private JFrame jFrame = null;
	private JPanel jContentPane = null;
	private JMenuBar jJMenuBar = null;
	private JMenu fileMenu = null;
	private JMenu editMenu = null;
	private JMenu helpMenu = null;
	private JMenuItem aboutMenuItem = null;
	private JMenuItem cutMenuItem = null;
	private JMenuItem copyMenuItem = null;
	private JMenuItem pasteMenuItem = null;
	private JMenuItem saveMenuItem = null;
	private JDialog aboutDialog = null;
	private JPanel aboutContentPane = null;
	private JLabel aboutVersionLabel = null;
	private JTable jTable = null;
	static Connection con = null;
	static DefaultTableModel aModel = new DefaultTableModel();

	/**
	 * This method initializes jFrame
	 * 
	 * @return javax.swing.JFrame
	 */
	private JFrame getJFrame() {
		if (jFrame == null) {
			jFrame = new JFrame();
			jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			jFrame.setJMenuBar(getJJMenuBar());
			jFrame.setSize(300, 200);
			jFrame.setContentPane(getJContentPane());
			jFrame.setTitle("Application");
		}
		return jFrame;
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(new BorderLayout());
			jContentPane.add(new JScrollPane(getJTable()), BorderLayout.CENTER);
		}
		return jContentPane;
	}

	/**
	 * This method initializes jJMenuBar	
	 * 	
	 * @return javax.swing.JMenuBar	
	 */
	private JMenuBar getJJMenuBar() {
		if (jJMenuBar == null) {
			jJMenuBar = new JMenuBar();
			jJMenuBar.add(getFileMenu());
			jJMenuBar.add(getEditMenu());
			jJMenuBar.add(getHelpMenu());
		}
		return jJMenuBar;
	}

	/**
	 * This method initializes jMenu	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getFileMenu() {
		if (fileMenu == null) {
			fileMenu = new JMenu();
			fileMenu.setText("Beenden");
			fileMenu.add(getSaveMenuItem());
		}
		return fileMenu;
	}

	/**
	 * This method initializes jMenu	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getEditMenu() {
		if (editMenu == null) {
			editMenu = new JMenu();
			editMenu.setText("Bearbeiten");
			editMenu.add(getCutMenuItem());
			editMenu.add(getCopyMenuItem());
			editMenu.add(getPasteMenuItem());
		}
		return editMenu;
	}

	/**
	 * This method initializes jMenu	
	 * 	
	 * @return javax.swing.JMenu	
	 */
	private JMenu getHelpMenu() {
		if (helpMenu == null) {
			helpMenu = new JMenu();
			helpMenu.setText("Help");
			helpMenu.add(getAboutMenuItem());
		}
		return helpMenu;
	}

	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getAboutMenuItem() {
		if (aboutMenuItem == null) {
			aboutMenuItem = new JMenuItem();
			aboutMenuItem.setText("About");
			aboutMenuItem.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					JDialog aboutDialog = getAboutDialog();
					aboutDialog.pack();
					Point loc = getJFrame().getLocation();
					loc.translate(20, 20);
					aboutDialog.setLocation(loc);
					aboutDialog.setVisible(true);
				}
			});
		}
		return aboutMenuItem;
	}

	/**
	 * This method initializes aboutDialog	
	 * 	
	 * @return javax.swing.JDialog
	 */
	private JDialog getAboutDialog() {
		if (aboutDialog == null) {
			aboutDialog = new JDialog(getJFrame(), true);
			aboutDialog.setTitle("About");
			aboutDialog.setContentPane(getAboutContentPane());
		}
		return aboutDialog;
	}

	/**
	 * This method initializes aboutContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getAboutContentPane() {
		if (aboutContentPane == null) {
			aboutContentPane = new JPanel();
			aboutContentPane.setLayout(new BorderLayout());
			aboutContentPane.add(getAboutVersionLabel(), BorderLayout.CENTER);
		}
		return aboutContentPane;
	}

	/**
	 * This method initializes aboutVersionLabel	
	 * 	
	 * @return javax.swing.JLabel	
	 */
	private JLabel getAboutVersionLabel() {
		if (aboutVersionLabel == null) {
			aboutVersionLabel = new JLabel();
			aboutVersionLabel.setText("Version 1.0");
			aboutVersionLabel.setHorizontalAlignment(SwingConstants.CENTER);
		}
		return aboutVersionLabel;
	}

	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getCutMenuItem() {
		if (cutMenuItem == null) {
			cutMenuItem = new JMenuItem();
			cutMenuItem.setText("Anzeigen");
			cutMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X,
					Event.CTRL_MASK, true));
		}
		cutMenuItem.addActionListener(new ActionListener() { 
			  @Override public void actionPerformed( ActionEvent e ) { 
				    
				  try{
				    Statement stmt = con.createStatement();
				    
				    String query = "SELECT * FROM Gastronomie";
				    
				    ResultSet rs = stmt.executeQuery( query );
				    ResultSetMetaData rsmd = rs.getMetaData();
				    
				    int col = rsmd.getColumnCount();
				    String[] columnnames = new String[col];
				    
//				    DefaultTableModel aModel = (DefaultTableModel) jTable.getModel();
				    
				    for (int i = 1; i <= col; i++)
				     {		    	
				    System.out.print(rsmd.getColumnName(i) + "\t\t");
				    columnnames[i-1]=rsmd.getColumnName(i);
				    
				    }
				    System.out.print("\n");
				    
				    Vector data = new Vector();
				    
				    aModel.setColumnIdentifiers(columnnames);
				    
				 // Ergebnisse anzeigen
				    while (rs.next())
				    {
				    	
				    	Object[] objects = new Object[col]; 
				    	
				    for (int i = 1; i <= col; i++)
				    {
				    System.out.print(rs.getObject(i) + "\t\t");
				    objects[i]=rs.getObject(i + 1);
				    }
				    System.out.print("\n");
				    aModel.addRow(objects);
				    }
				    jTable.setModel(aModel);
				    rs.close();
				    stmt.close();
				    con.close();
				   
				  
				  } catch (SQLException e1) {
					    // Could not connect to the database
					}				  } 
				});
		
		
		
		return cutMenuItem;
	}

	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getCopyMenuItem() {
		if (copyMenuItem == null) {
			copyMenuItem = new JMenuItem();
			copyMenuItem.setText("Suchen");
			copyMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,
					Event.CTRL_MASK, true));
		}
		return copyMenuItem;
	}

	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getPasteMenuItem() {
		if (pasteMenuItem == null) {
			pasteMenuItem = new JMenuItem();
			pasteMenuItem.setText("Einfügen");
			pasteMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,
					Event.CTRL_MASK, true));
		}
		return pasteMenuItem;
	}

	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */
	private JMenuItem getSaveMenuItem() {
		if (saveMenuItem == null) {
			saveMenuItem = new JMenuItem();
			saveMenuItem.setText("Beenden");
			saveMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
					Event.CTRL_MASK, true));
		}
		
		saveMenuItem.addActionListener(new ActionListener() { 
			  @Override public void actionPerformed( ActionEvent e ) { 
			    System.exit(0);
			  } 
			}); 
		
		return saveMenuItem;
	}

	/**
	 * This method initializes jTable	
	 * 	
	 * @return javax.swing.JTable	
	 */
	private JTable getJTable() {
		if (jTable == null) {
			jTable = new JTable(aModel);
			jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
			
			
		}
		return jTable;
	}

	/**
	 * Launches this application
	 */
	public static void main(String[] args) throws SQLException {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				Oberflaeche application = new Oberflaeche();
				application.getJFrame().setVisible(true);
			}
		});
		
try { 
			
		    // Load the JDBC driver
		    String driverName = "oracle.jdbc.driver.OracleDriver";
		    Class.forName(driverName);

		    // Create a connection to the database
		    String serverName = "******";
		    String portNumber = "******";
		    String sid = "oradb";
		    String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid;
		    String username = "*******";
		    String password = "*******";
			con = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
    // Could not find the database driver
}
	}

}
```


----------



## SlaterB (24. Okt 2011)

du hast ja sogar System.out.println()-Ausgaben drin, erscheinen die nicht wie ich nun annehmen muss?
wieso schreibst du nichts davon, sondern von der langweiligen GUI, wo noch tausend Sachen schiefgehen können,

die Ausgabe bricht ab, es kommt sicher zu einer Exception die du ja genialerweise ignorierst:

```
} catch (SQLException e1) {
                        // Could not connect to the database
                    }
```
bzw. im Falle anderer Exceptions sind die in der GUI auch nicht so leicht zu sehen, nur in der Konsole, da schaust du vielleicht gar nicht hin wenn dir das mit den System.out.println()-Ausgaben auch nicht groß aufgefallen ist..


```
for (int i = 1; i <= col; i++)
                    {
                    System.out.print(rs.getObject(i) + "\t\t");
                    objects[i]=rs.getObject(i + 1);
                    }
```
i läuft bis col, aber du greifst auf Index i+1 zu?
in der Ausgabe scheint es sogar noch richtig zu sein,


----------



## JimK (24. Okt 2011)

Vielen Dank für deine schnelle Antwort.
Ich muss zugeben, dass ich dieses mal etwas faul war und zum GUI Builder gegriffen habe, ob wohl ich keine große Ahnung von diesem habe. ^^ Aber ich wollte ihn mal ausprobieren. ^^

Also jTable ist es so ein rotes tuch für mich. Manchmal habe ich das Gefühl, dass sie sich immer gegen mich verschwört. ^^ Aber das tut jetzt nichts zur Sache.

Ich habe eben nochmal deinen Tip befolgt und jetzt funktioniert es. Vielen Dank lieber SlaterB und ich verspreche, dass ich das nächste mal nicht so faul sein werden. ^^


----------



## ARadauer (24. Okt 2011)

> dass ich dieses mal etwas faul war


mhn ja... 370 Zeilen posten und fragen wo der fehler ist... aber ein Versuch wars wert ;-)

Zum Thema JTable empfehl ich dir das: http://www.java-forum.org/bilder-gui-damit-zusammenhaengt/4841-jtable-ubersicht-teil-1-teil-8-a.html Hilft extrem beim Verständnis!


----------

