Tabelle und SQL Daten

Status
Nicht offen für weitere Antworten.

teh_raccoon

Mitglied
Hallo Zusammen,

Ich möchte gerne Daten aus einer MySQL Datenbank holen, und in einer Tabelle mit mehreren Spalten darstellen.

[DONE] Wenn die Daten mehr Zeilen sind als das Fenster hoch ist, soll man Scrollen können (ScrollPanel)
[PENDENT] Der Benutzer soll in eine Zeile doppelklicken können, um ein Bearbeitungsfenster (BearbeitenGUI) aufzurufen, wo dann ein SQL Statement ausgeführt wird, mit der ID des angeklickten Datensatzes

Ich bin noch in der Ausbildung, und mein Lehrer hat mich gewarnt, dass ich mich auf eine sehr komplexe Komponente vin Swing einlasse (JTable) mit der er selbst kaum Ahnung hat. Trotzdem möchte ich die Daten in einer Tabelle anzeigen und nicht in aneinandergereihte TextFields o.ä.

Was gibt es da für Möglichkeiten? (SimpleTable, JTable)
 

EOB

Top Contributor
hi, also dein lehrer scheint ja ne pflaume zu sein. da sieht man mal wieder, dass leute immer zu dem raten, was für sie bequemer ist. wie sähe es wohl aus, wenn du das hinbekommen würdest? ;-)

versuchs mal so:

Code:
import javax.swing.*; 
	import javax.swing.table.*; 
	import java.sql.*; 
	import java.util.*; 
	import java.io.*;
	public class TestJDBCTable {
		public static void main (String[] args) {
			try {

		/* 
		 driver, url, user, and pass can be passed in as 
		 system properties "jdbctable.driver", 
		 "jdbctable.url", "jdbctable.user", and 
		 "jdbctable.pass", or specified in a file 
		 called "jdbctable.properties" in current 
		 directory
		*/
		Properties testProps = new Properties();
		String ddriver = System.getProperty ("jdbctable.driver");
		String durl = System.getProperty ("jdbctable.url");
		String duser = System.getProperty ("jdbctable.user");
		String dpass = System.getProperty ("jdbctable.pass");

		if (ddriver != null) 
			testProps.setProperty ("jdbctable.driver", ddriver); 
		if (durl != null) 
			testProps.setProperty ("jdbctable.url", durl); 
		if (duser != null) 
			testProps.setProperty ("jdbctable.user", duser);
		if (dpass != null) 
			testProps.setProperty ("jdbctable.pass", dpass);
		try { 
			testProps.load (new FileInputStream (
					new File ("jdbctable.properties"))); 
		} catch (Exception e) {} // ignore FNF, etc. 
		System.out.println ("Test Properties:"); 
		testProps.list (System.out);
		// now get a connection 
		// note care to replace nulls with empty strings 
		Class.forName(testProps.getProperty
				("jdbctable.driver")).newInstance();
		String url = testProps.getProperty ("jdbctable.url");
		url = ((url == null) ? "" : url); 
		String user = testProps.getProperty ("jdbctable.user"); 
		user = ((user == null) ? "" : user); 
		String pass = testProps.getProperty ("jdbctable.pass"); 
		pass = ((pass == null) ? "" : pass);

		Connection conn = 
			DriverManager.getConnection (url, user, pass);
		// create db table to use
		String tableName = createSampleTable(conn);

		// get a model for this db table and add to a JTable
		TableModel mod =
			new JDBCTableModel (conn, tableName);
		JTable jtable = new JTable (mod);
		JScrollPane scroller =
			new JScrollPane (jtable, 
				ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, 
				ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		JFrame frame = new JFrame ("JDBCTableModel demo");
		frame.getContentPane().add (scroller);
		frame.pack();
		frame.setVisible (true);

		conn.close();

			} catch (Exception e) {
		e.printStackTrace();
			}
		}

		public static String createSampleTable (Connection conn)
			throws SQLException {

			Statement statement = conn.createStatement();
			// drop table if it exists
			try {

		statement.execute ("DROP TABLE EMPLOYEES");
			} catch (SQLException sqle) {
		sqle.printStackTrace(); // if table !exists
			}
			
			statement.execute ("CREATE TABLE EMPLOYEES " + 
				   "(Name CHAR(20), Title CHAR(30), Salary INT)"); 
			statement.execute ("INSERT INTO EMPLOYEES VALUES " + 
				   "('Jill', 'CEO', 200000 )"); 
			statement.execute ("INSERT INTO EMPLOYEES VALUES " + 
				   "('Bob', 'VP', 195000 )"); 
			statement.execute ("INSERT INTO EMPLOYEES VALUES " + 
				       "('Omar', 'VP', 190000 )"); 
			statement.execute ("INSERT INTO EMPLOYEES VALUES " + 
				   "('Amy', 'Software Engineer', 50000 )"); 
			statement.execute ("INSERT INTO EMPLOYEES VALUES " + 
				   "('Greg', 'Software Engineer', 45000 )");

	     statement.close();
		 return "EMPLOYEES"; 
		 }
	}

du siehst also, es geht mit nem tablemodel, welches so aussieht:

Code:
import javax.swing.*; 
	import javax.swing.table.*; 
	import java.sql.*; 
	import java.util.*;
	/** an immutable table model built from getting 
		metadata about a table in a jdbc database 
	*/ 
	public class JDBCTableModel extends AbstractTableModel {
		Object[][] contents;
		String[] columnNames;
		Class[] columnClasses;

		public JDBCTableModel (Connection conn,
				   String tableName)
			throws SQLException {
			super();
			getTableContents (conn, tableName);

		}
		protected void getTableContents (Connection conn,
					 String tableName)
			throws SQLException {

		// get metadata: what columns exist and what
		// types (classes) are they?
		DatabaseMetaData meta = conn.getMetaData();
		System.out.println ("got meta = " + meta);
		ResultSet results =
			meta.getColumns (null, null, tableName, null) ;
		System.out.println ("got column results");
		ArrayList colNamesList = new ArrayList();
		ArrayList colClassesList = new ArrayList();
		while (results.next()) {
			colNamesList.add (results.getString ("COLUMN_NAME")); 
			System.out.println ("name: " + 
				results.getString ("COLUMN_NAME"));
			int dbType = results.getInt ("DATA_TYPE");
			switch (dbType) {
			case Types.INTEGER:
		colClassesList.add (Integer.class); break; 
			case Types.FLOAT:
		colClassesList.add (Float.class); break; 
			case Types.DOUBLE: 
			case Types.REAL:
		colClassesList.add (Double.class); break; 
			case Types.DATE: 
			case Types.TIME: 
			case Types.TIMESTAMP:
		colClassesList.add (java.sql.Date.class); break; 
			default:
		colClassesList.add (String.class); break; 
			}; 
			System.out.println ("type: " +
				results.getInt ("DATA_TYPE"));
			}
			columnNames = new String [colNamesList.size()];
			colNamesList.toArray (columnNames);
			columnClasses = new Class [colClassesList.size()];
			colClassesList.toArray (columnClasses);
			
			// get all data from table and put into
			// contents array

			Statement statement =
		conn.createStatement ();
			results = statement.executeQuery ("SELECT * FROM " +
						  tableName);
			ArrayList rowList = new ArrayList();
			while (results.next()) {
		ArrayList cellList = new ArrayList(); 
		for (int i = 0; i<columnClasses.length; i++) { 
			Object cellValue = null;


			if (columnClasses[i] == String.class) 
		cellValue = results.getString (columnNames[i]); 
			else if (columnClasses[i] == Integer.class) 
		cellValue = new Integer ( 
				results.getInt (columnNames[i])); 
			else if (columnClasses[i] == Float.class) 
		cellValue = new Float ( 
				results.getInt (columnNames[i])); 
			else if (columnClasses[i] == Double.class) 
		cellValue = new Double ( 
				results.getDouble (columnNames[i]));
			else if (columnClasses[i] == java.sql.Date.class) 
		cellValue = results.getDate (columnNames[i]); 
			else 
		System.out.println ("Can't assign " + 
				columnNames[i]);
			cellList.add (cellValue);
		}// for
		Object[] cells = cellList.toArray();
		rowList.add (cells);
		
	} // while
	// finally create contents two-dim array
	contents = new Object[rowList.size()] [];
	for (int i=0; i<contents.length; i++)

		contents[i] = (Object []) rowList.get (i);
	System.out.println ("Created model with " +
			   contents.length + " rows");

	// close stuff
	results.close();
	statement.close();

	}
	// AbstractTableModel methods
	public int getRowCount() {
		return contents.length;
	}

	public int getColumnCount() {
		if (contents.length == 0)
			return 0;
		else
			return contents[0].length;
		}

		public Object getValueAt (int row, int column) {
			return contents [row][column];
		}

		// overrides methods for which AbstractTableModel
		// has trivial implementations

		public Class getColumnClass (int col) {
			return columnClasses [col];
		}

		public String getColumnName (int col) { 
			return columnNames [col]; 
		} 
	}

da schreibst du jetzt schön deinen namen rein und haust den lehrer in die pfanne :shock: :cool: .

grüße
eob

ps: da musst du natürlich jetzt deine funktionalität (fenster öffnen) etc dran hängen durch listener....
 

teh_raccoon

Mitglied
Danke erstmal...

Nun bekomme ich aber eine Fehlermeldung

Code:
Test Properties:
-- listing properties --
java.lang.NullPointerException
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at archiv.TestJDBCTable.main(TestJDBCTable.java:42)

Code bis Zeile 50

Code:
package archiv;

import javax.swing.*;
import javax.swing.table.*;
import java.sql.*;
import java.util.*;
import java.io.*;

public class TestJDBCTable {
	public static void main(String[] args) {
		try {

			/*
			 * driver, url, user, and pass can be passed in as system properties
			 * "jdbctable.driver", "jdbctable.url", "jdbctable.user", and
			 * "jdbctable.pass", or specified in a file called
			 * "jdbctable.properties" in current directory
			 */
			Properties testProps = new Properties();
			String ddriver = System.getProperty("com.mysql.jdbc.Driver");
			String durl = System.getProperty("srvweb03");
			String duser = System.getProperty("******");
			String dpass = System.getProperty("******");

			if (ddriver != null)
				testProps.setProperty("jdbctable.driver", ddriver);
			if (durl != null)
				testProps.setProperty("jdbctable.url", durl);
			if (duser != null)
				testProps.setProperty("jdbctable.user", duser);
			if (dpass != null)
				testProps.setProperty("jdbctable.pass", dpass);
			try {
				testProps.load(new FileInputStream(new File(
						"jdbctable.properties")));
			} catch (Exception e) {
			} // ignore FNF, etc.
			System.out.println("Test Properties:");
			testProps.list(System.out);
			// now get a connection
			// note care to replace nulls with empty strings
			Class.forName(testProps.getProperty("jdbctable.driver"))
					.newInstance();
			String url = testProps.getProperty("jdbctable.url");
			url = ((url == null) ? "" : url);
			String user = testProps.getProperty("jdbctable.user");
			user = ((user == null) ? "" : user);
			String pass = testProps.getProperty("jdbctable.pass");
			pass = ((pass == null) ? "" : pass);
 

EOB

Top Contributor
du musst dir noch ne properties datei anlegen, in der das dan drinne steht...also die werte für die connection. die nennst du dann jdbctable.properties.

grüße :toll:
 

teh_raccoon

Mitglied
Hab jetzt ein bisschen gegoogelt. Ist es richtig, dass das Properties-File Benutzer und DB Zugangsdaten enthält??

Weil wir haben bisher immer so auf eine MySQL DB connectet:

Code:
Class.forName( "com.mysql.jdbc.Driver" );
Connection conn = DriverManager.getConnection( "jdbc:mysql://meinhost:3306/meindbname", "meinusername", "meinpasswort");

wo müsste dann das .properties hin? Und was steht da drin. Der Wikipedia Artikel hat mir nicht wirklich weitergeholfen.
 

EOB

Top Contributor
das ist hier genauso, nur das die werte aus der prop datei kommen. wenn du das so nicht machen willst, dann weise deine verbindungsdaten den strings direkt zu...sollte auch gehen ;). wenns fragen gibt, frag ruhig!

grüße
 

teh_raccoon

Mitglied
Das Problem besteht weitehin (Dieselbe Fehlermeldung)

Hier darf man wohl keine Anhänge speichern. Deshalb hier der Inhalt der jdbctable.properties

Code:
jdbctable.driver = com.mysql.jdbc.Driver
jdbctable.url = srvweb03
jdbctable.user = usrbgza2
jdbctable.pass = geheimespasswort

Das File ist im bin und src ordner im richtigen Unterordner (Package)
 

EOB

Top Contributor
hm...schwer zu sagen, sollte so stimmen. dann schreib die details mal gleich so in den code und lass dir prop datei weg. nutzt du eine ide, oder machst du das über konsole?

grüße
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Anbinden der Tabelle an die Daten AWT, Swing, JavaFX & SWT 5
F JavaFX Tabelle mit Daten füllen AWT, Swing, JavaFX & SWT 9
F JavaFX Daten aus Tabelle in ComboBox AWT, Swing, JavaFX & SWT 9
H Swing Tabelle nach Klick auf Button mit Daten füllen? AWT, Swing, JavaFX & SWT 2
Milady Annzeigen alle Daten aus der Tabelle AWT, Swing, JavaFX & SWT 6
E Daten aus sortierter Tabelle lesen AWT, Swing, JavaFX & SWT 2
T SWT:Tabelle auf Knopfdruck mit aktualisierten Daten zeichnen AWT, Swing, JavaFX & SWT 9
C Daten in Tabelle einfügen AWT, Swing, JavaFX & SWT 8
W Kleine Sub-Tabelle in SpreadsheetView-Zelle anzeigen AWT, Swing, JavaFX & SWT 9
K Tabelle zu Datenbank hinzufügen / Apache Derby AWT, Swing, JavaFX & SWT 7
izoards JavaFX editierbare Tabelle AWT, Swing, JavaFX & SWT 4
HoT Sortieren von ein paar Zeilen in einer Tabelle, aber nicht die ganze Tabelle AWT, Swing, JavaFX & SWT 3
H Tabelle in JFrame einfügen AWT, Swing, JavaFX & SWT 1
T Zelle- und die Zeile-Farbenwechsel bei der Selektion in der Tabelle AWT, Swing, JavaFX & SWT 4
ralfb1105 JavaFX TreeView dynamisch aus Datenbank Tabelle erstellen AWT, Swing, JavaFX & SWT 22
kodela Swing Letzte Änderung in der Tabelle wird nicht gespeichert AWT, Swing, JavaFX & SWT 5
W JavaFX Tabelle zeilenweise mit Werten füllen und an Container anpassen AWT, Swing, JavaFX & SWT 23
F JavaFX Tabelle mit gespeicherten Eingabe Werten AWT, Swing, JavaFX & SWT 8
adiko01 JTable: Nur markierte Zeilen aus der Tabelle in CSV exportiern AWT, Swing, JavaFX & SWT 9
B Zeile einer Tabelle selektieren AWT, Swing, JavaFX & SWT 1
A Swing Tabelle wird bei Betätigung des Button nicht befüllt AWT, Swing, JavaFX & SWT 17
L Dynamischer Aufbau einer Tabelle über Objekte AWT, Swing, JavaFX & SWT 2
B Swing Tabelle(JTable) filtern swing GUI AWT, Swing, JavaFX & SWT 3
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
MrSnake Tabelle nach 2 Strings Filtern AWT, Swing, JavaFX & SWT 3
D Filter in Tabelle Sql AWT, Swing, JavaFX & SWT 6
M JavaFX Tabelle flexibler Länge AWT, Swing, JavaFX & SWT 3
T Swing Tabelle mit Button - Anzeigefehler nach Zeile entfernen AWT, Swing, JavaFX & SWT 1
JavaMachtMichFertig JavaFX Gui - Löschbutton in Tabelle anzeigen, die mittels MySQL Abfrage gefüllt wird AWT, Swing, JavaFX & SWT 5
D Swing Breite einer HTML Tabelle in einer JTextPane AWT, Swing, JavaFX & SWT 6
J JavaFX Tabelle soll ganze Seite ausfüllen AWT, Swing, JavaFX & SWT 2
M ausgewählte Inhalt von ListItem inn ComboBox in der Tabelle speichern AWT, Swing, JavaFX & SWT 0
D Swing Eigene Tabelle AWT, Swing, JavaFX & SWT 18
M Filter in die JFace/SWT Tabelle einbauen AWT, Swing, JavaFX & SWT 5
T SWT Mysql Tabelle zeigt immer nur den ersten Wert immer wieder an AWT, Swing, JavaFX & SWT 3
J JavaFX eine Art Tabelle, jedoch mit mehreren Zeilen AWT, Swing, JavaFX & SWT 2
P Swing Klick in Tabelle nicht möglich AWT, Swing, JavaFX & SWT 0
Thallius Swing Tabelle nach Datumsspalte sortieren AWT, Swing, JavaFX & SWT 4
E Tabelle zeigt nicht neuste Datenbankeinträge an AWT, Swing, JavaFX & SWT 5
F SWT Problem mit Tabelle und Combobox in einem Wizard AWT, Swing, JavaFX & SWT 5
D Swing JTable- Meine Tabelle der Klasse JTable wird nur bedingt angezeigt AWT, Swing, JavaFX & SWT 4
O Tabelle "animiert" Scrollen AWT, Swing, JavaFX & SWT 1
R Int aus JSpinner auslesen und Tabelle erstellen AWT, Swing, JavaFX & SWT 3
G JavaFX ComboBoxTableCell für Zuordnung in Tabelle AWT, Swing, JavaFX & SWT 2
B Probleme bei Sortierung einer Tabelle mit DefaultTableModel AWT, Swing, JavaFX & SWT 6
L Tabelle reagiert ungewollt auf Mausklick AWT, Swing, JavaFX & SWT 6
C Verschiebbare "Buttons" in einer Tabelle AWT, Swing, JavaFX & SWT 3
S Swing Tabelle mit Model bei eingeschaltetem Filter synchronisieren AWT, Swing, JavaFX & SWT 6
P Listener Auswahl Tabelle AWT, Swing, JavaFX & SWT 6
B LayoutManager Tabelle repainten AWT, Swing, JavaFX & SWT 4
K Swing JTable Text im Hintergrund einer leeren Tabelle AWT, Swing, JavaFX & SWT 3
H JScrollPane - JEditorPane und HTML-Tabelle AWT, Swing, JavaFX & SWT 2
F Elementbezeichnung in der Tabelle AWT, Swing, JavaFX & SWT 7
F Tabelle sortieren AWT, Swing, JavaFX & SWT 3
F SWT Tabelle Zeile auslesen AWT, Swing, JavaFX & SWT 3
T Spaltennamen jeweils der angezeigten Tabelle anpassen AWT, Swing, JavaFX & SWT 19
S JTable Filter nach Wort oder Wortteil über ganze Tabelle AWT, Swing, JavaFX & SWT 5
L Fehler beim erstellen einer Tabelle mithilfe von 2d-Array AWT, Swing, JavaFX & SWT 3
T Swing JScrollPane- und Tabelle-Header Problem AWT, Swing, JavaFX & SWT 25
B Tabelle anpassen AWT, Swing, JavaFX & SWT 6
N jComboBox mit eigenem Renderer und eigenem Datentyp als Rückgabe in einer Tabelle AWT, Swing, JavaFX & SWT 2
N Button akivieren, wenn Tabelle verändert worden ist AWT, Swing, JavaFX & SWT 2
C SWT refresh einer Tabelle AWT, Swing, JavaFX & SWT 4
X Tabelle während Funktionsaufruf aktualisieren AWT, Swing, JavaFX & SWT 11
C SWT Tabelle mit Werten befüllen AWT, Swing, JavaFX & SWT 5
Y LayoutManager Keine vollständige Darstellung der Tabelle mit GridBagLayout AWT, Swing, JavaFX & SWT 3
S Tabelle sortieren, mit Ausnahme der letzten Zeile AWT, Swing, JavaFX & SWT 9
H SWT RAP Anwendung - Tabelle - Theming AWT, Swing, JavaFX & SWT 3
_dp Swing ScrollPane unterschlägt Großteil der Tabelle AWT, Swing, JavaFX & SWT 7
_dp Swing Tabelle: Ausklappbare Einträge AWT, Swing, JavaFX & SWT 2
C Swing Inhalt einer JTable aktualisieren und filten nach Feldern die nicht in der Tabelle sind AWT, Swing, JavaFX & SWT 3
S Tabelle im selben Formular anzeigen AWT, Swing, JavaFX & SWT 6
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
M Im Frame wird nur die Menüleiste erstellt und nicht die Tabelle? AWT, Swing, JavaFX & SWT 3
A SWT Tabelle (elegant) sortieren AWT, Swing, JavaFX & SWT 2
D Scrollbar für Tabelle AWT, Swing, JavaFX & SWT 2
A Button in Tabelle ansprechen AWT, Swing, JavaFX & SWT 6
O Tabelle laden - Prozessorlast 100% ?? AWT, Swing, JavaFX & SWT 11
F Tabelle und Bildindex (Thumbnails) AWT, Swing, JavaFX & SWT 4
A SWT Tabelle Sortieren AWT, Swing, JavaFX & SWT 3
Airwolf89 Swing Exception beim Füllen einer Tabelle AWT, Swing, JavaFX & SWT 10
D Swing Tabelle sortieren AWT, Swing, JavaFX & SWT 4
B tabelle mit labeln AWT, Swing, JavaFX & SWT 2
M sortierbare Tabelle mit jface und databinding AWT, Swing, JavaFX & SWT 3
H ArrayList?! in Tabelle AWT, Swing, JavaFX & SWT 3
D SWT String aus Textfeld auslesen und in eine Tabelle speichern AWT, Swing, JavaFX & SWT 5
Ollek JTable - Tabelle füllen mit einer ArrayList AWT, Swing, JavaFX & SWT 22
T Swing Java Darstellung einer Tabelle AWT, Swing, JavaFX & SWT 3
FoolMoon Swing JCheckBox neben Text in einer Tabelle AWT, Swing, JavaFX & SWT 2
K Strings aus jTextArea in Liste oder Tabelle übertragen- wie? AWT, Swing, JavaFX & SWT 4
H Swing Saubere Erstellung einer Tabelle AWT, Swing, JavaFX & SWT 3
O Tabelle über Event sortieren AWT, Swing, JavaFX & SWT 4
T Invalid Range - Fehler bei TableRowSorter / Tabelle AWT, Swing, JavaFX & SWT 17
S Zeile an eine Tabelle anfügen AWT, Swing, JavaFX & SWT 5
S Datum in Tabelle darstellen? AWT, Swing, JavaFX & SWT 4
R JTable: Tabelle neu darstellen AWT, Swing, JavaFX & SWT 6
M JSplitPane Tabelle neu zeichnen AWT, Swing, JavaFX & SWT 3
G Tabelle eine JList anziegen AWT, Swing, JavaFX & SWT 4
G Tabelle Spalten unsichtbar machen AWT, Swing, JavaFX & SWT 5
P Für den Inhalt einer Zelle (aus Tabelle) STRG-C anwenden AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben