MySQL Row und ColumnIndex aus einer JTable (mysqlDb) selectieren

Bladetown

Mitglied
Hallo zusammen,

ich habe eine Anwendung geschrieben, die eine MYSQL DB ausliest und in einer JTable darstellt, nun möchte ich in der JTable eine Zeile auswählen und bearbeiten / löschen.
Das Löschen habe ich halbwegs hinbekommen, allerdings habe ich ein Problem, mir generell den Index der selectierten Zeile ausgeben zu lassen!

Hat diesbezüglich jemand eine Idee, oder vielleicht einen Lösungsansatz für mich?!?!?
Danke für Eure Hilfe!!!!


LG:rtfm:
 

Raziell

Bekanntes Mitglied
Hi,

also ich hab das immer so gelöst, dass ich die ID eines Datensatzes mit in die JTable geschrieben habe
und dann einfach die Spalte unsichtbar gemacht habe, sprich die breite auf 0 gesetzt.

Dann kannst du einfach mit Hilfe von getSelectedColumn(), getSelectedRow() und dann
getValueAt (int row, int column) beim auswählen der Zeile die ID des Datensatzes mit auslesen.

Gruß
 
Zuletzt bearbeitet:

Bladetown

Mitglied
Hi und Danke für die schnelle Antwort,

das hatte ich schon getan, allerdings bekam ich immer als Ergebnis einen Wert von -1, welchen ich nicht zuordnen konnte!

Ich weiss nicht wie ich die Methoden getSelectedColumn() und getSelectedRow() einbinden soll, sodass nicht die Fehlermeldung

"Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1"

kommt!

LG:rtfm:
 
Zuletzt bearbeitet:

Raziell

Bekanntes Mitglied
Ok hier ein kleines ganz simples Beispiel auf das wichtigste reduziert:

Java:
private DefaultTableModel modelBudgets = new DefaultTableModel();

/**
*Creates a table and fill it with the dates from the budgets.
*/
public void createTable() {
     
for (int i = 0; i < budgetLib.getBudgets().size(); i++) {
     modelBudgets.addRow(budgetLib.getBudgets().elementAt(i).getDates());
 }

}

/**
* Returns the ID of a budget plan based on the selected row.
*/
public void mousePressed(MouseEvent e) {
		
String idBudget = "-1";
int row = tableBudgets.getSelectedRow();

if (row > -1) {
   idBudget = (String) modelBudgets.getValueAt(row, 1);
} else {
   return null;
}
   return idBudget;
}

Hoffe das ganze ist verständlich. :)

Gruß
 

Bladetown

Mitglied
Hallo ich versuche dein Beispiel umzusetzten, verstehe allerdings nicht warum du das so setzt???

String idBudget = "-1";

Bei meiner Programmierter Auswahl des Zeilenindexes bekommen ich leider immer diesen Wert "-1" egal in welcher Zelle ich mich befinde!!!

LG
 

ymene

Bekanntes Mitglied
Der Quelltext ist tatsächlich etwas aus dem Kontext gerissen vermute ich, da dass so in dieser Form auch für mich keinen Sinn ergibt.

Du erhälst immer genau dann -1 von der Methode [c]getSelectedRow()[/c], wenn aktuell keine row selektiert ist (so steht es auch im JavaDoc). Da ich deinen Quelltext nicht kenne kann ich nur vermuten, dass du mit diesen Index versuchst den Datensatz an der Stelle -1 aus deinem Model zu löschen, was natürlich nicht möglich ist. Hast du vielleicht nen kleines Beispiel, womit sich dein Fehler reproduzieren lässt, oder kannst du die Stelle mal aufzeigen, bei der du die Exception bekommst? Dann kann man dir sicher weiter helfen.

Beim Löschen musst du natürlich prüfen, dass auch ein entsprechender Datensatz in der Table selektiert ist. Entweder fängst du ab, dass aktuell kein Datensatz selektiert ist, fragst also vorher ab, ob [c]getSelectedRow() == -1[/c] ist oder du nutzt stattdessen gleich [c]getSelectedRows()[/c], welche dir alle aktuell selektierten Rows zurück gibt und falls keine selektiert ist, lediglich ein leeres Array (was bedeuten würde, dass du einfach nichts löschen musst).
 

Raziell

Bekanntes Mitglied
Hi,

ja ich merke gerade ich hab da völlig falschen Code gepostet habe :D

Was ich dir eigtl. damit zeigen wollte ist, wie du die ausgewählte Zeile ausliest.
Das ganze funktioniert korrekterweise so:

Java:
public void mousePressed(MouseEvent e) {
  checkSelection();
}


public int checkSelection(){
   int row = table.getSelectedRow();
 
    if (row > -1) {
       System.out.println("Datensatz Nr: "+ row + " selektiert!");
    } else {
     System.out.println("Kein Datensatz selektiert!");
    }
  }

Füllst du dein TableModel korrekt?
Lass dir doch mal die größe von deinem Model ausgeben.

Gruß
 
Zuletzt bearbeitet:

Bladetown

Mitglied
Hallo zusammen,

ich versuche mal meinen Code zusammen zu tragen, da er übergreifend aus 4 Klassen besteht!
Allerdings so einfach wie Raziell erst geschrieben hat funktioniert es leider nicht!

Der selectierte Indexwert soll anschließend an eine SQL Query Übergeben werden und diesen dann ausführen!

Ich versuche den Code zusammen zu fassen!!

LG:rtfm:
 

Bladetown

Mitglied
das ist meine Methode, mit diversen Versuchen, bzw. Test´s den idx heraus zu bekommen!!!

Java:
	public static void deleteRow() throws SQLException{
		
		Object 			idx;
		int row	=		einfacheSqlAbfrageTableGui.jtView.getSelectedRow();
		int menge	=	0;
		
		
		try{
		
			// Aufbau der Verbindung zur DB und Tabelleninhalte in rs ablegen		
			stmtCr = einfacheSqlAbfrageDbStatement.con.createStatement();	
			
			idx = einfacheSqlAbfrageTableGui.jtView.getValueAt(0, 0);			
			// Ausführende SQL-Abfrage
//			rsCr = stmtCr.executeUpdate("DELETE FROM name WHERE Id_Name='" + rowId+ "'");
			
			// Zählschleife für Anzahl der Datensätze
			for (int z = 0; z < einfacheSqlAbfrageTableGui.tblMdl.getRowCount(); z++){
				// Summe an Datensätzen in der DB
				menge = z; 
			}
			
			// Anzahl der Datensätze ausgeben ( +1 weil Datensätzte mit 0 beginnen)
			System.out.println("Gesamtanzahl der Datensätze: "+ (menge +1));
			
			
			
		}
		catch(SQLException e){
			
		
			e.printStackTrace();
		}
	
		
	}


Kann es sein, das ich kein Ergebnis bekomme, weil mit der MouseListener / MouseEvent fehlt???
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Was soll den die Methode machen?? Dem Namen nach eine Zeile löschen. Aus der JTable oder aus einer Datenbanktabelle? Oder aus beiden?

[JAVA=18] for (int z = 0; z < einfacheSqlAbfrageTableGui.tblMdl.getRowCount(); z++){
// Summe an Datensätzen in der DB
menge = z;
}[/code]
Die for-Schleife kann man sich auch sparen ;-)
Kann es sein, das ich kein Ergebnis bekomme, weil mit der MouseListener / MouseEvent fehlt???
Und was soll da jetzt ein MouseListener mit zu tun haben??
 

Bladetown

Mitglied
Hallo Michael,

wie oben schon beschrieben sind das diverse Test´s!
Mit der FOR-Schleife lasse ich mir lediglich die Anzahl der Datensätze widergeben.

Die Frage mit dem MouseEvent kommt daher, das ich nicht genau weiss wie das "getSelectedRow" realisiert wird, bzw. wie die Selektion funktioniert, reicht es wenn ich in der JTable den Wert "markiere" oder muss ich da mit einem Event arbeiten?!!?

LG:rtfm:
 

ymene

Bekanntes Mitglied
Jede JTable besitzt von grund auf ein ListSelectionModel. Dieses Model kümmert sich selbstständig darum, welche Zeilen gerade selektiert sind. Wenn du nun die JTable fragst, welche Zeilen gerade auf ihr markiert sind (welche Zeilen der User gerade auf der Tabelle selektiert hat), dann fragt getSelectedRow() intern dieses ListSelectionModel ab und gibt dir die entsprechenden Werte zurück. Selbiges gilt natürlich auch für Spalten mit den entsprechenden pendant getSelectedColumn().

Einen MouseListener oder ähnliches brauchst du dafür nicht anmelden, diese Funktionalität ist direkt gegeben.

Um deine Frage noch einmal kurz zu beantworten:

Bladetown hat gesagt.:
reicht es wenn ich in der JTable den Wert "markiere" oder muss ich da mit einem Event arbeiten?!!?
Ja, markieren genügt.
 

Raziell

Bekanntes Mitglied
Hi,

nochmal als Tipp. Schreibe die ID eines Datensates aus der Datenbank mit in dein TableModel.

Kleines Beispiel:

Java:
Object[] array = new Object[3];

array[0] = id;
array[1] = text;
array[2] = wert;

model.addRow(array);

Dann kannst du sicher sein, dass die ID immer an erster Stelle im Model steht.
Jetzt musste du nurnoch wie in meinem Beispiel die selektierte Zeile ermitteln und kann dier dann praktisch mit
Java:
getValueAt(row , 1)
immer die ID des Datensatzes holen.

Anhand der ID kannst du ja dann den entsprechenden Datensatz ändern bzw. löschen.

Gruß
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Mit der FOR-Schleife lasse ich mir lediglich die Anzahl der Datensätze widergeben.
Naja, dann schau sie Dir nochmals genauer an.
Du lässt eine Variable von 0 bis < ...getRowCount() hochzählen.
Rate mal welchen Wert die Variable am Ende der Schleife hat ;-)
Die Frage mit dem MouseEvent kommt daher, das ich nicht genau weiss wie das "getSelectedRow" realisiert wird, bzw. wie die Selektion funktioniert, reicht es wenn ich in der JTable den Wert "markiere" oder muss ich da mit einem Event arbeiten?!!?
Die Frage ist, willst Du auf irgendein Ereignis reagieren (der Anwender klickt auf eine Zelle)? Dann musst Du einen Listener an der Komponente registieren. Oder reagierst Du bereits auf ein Ereignis (z.B. Buttonklick). Jedenfalls liefert getSelectedRow() die aktuell selektierte Zeile einer JTable bzw. -1 wenn keine Zeile selektiert ist.
z.B. Anwender drückt Löschen-Button --> actionPerformed(...) wird aufgerufen (den ActionListener zum Buttton musst Du natürlich selbst implementieren). In dieser Methode kannst Du dann die Table nach der aktuell selektierten Zeile fragen und diese per remove... aus dem Model löschen (Achtung TableIndex kann != ModelIndex sein s. JTable#convertRowIndexToModel(int))
 

Bladetown

Mitglied
Hallo,

ja ich möchte in meiner Tabelle (quasi die ausgelesene Mysql Tabelle) selektieren und anschließend die selektierte Zeile löschen!
Im zweiten step sollten dann auch Daten bearbeitet werden können!!!
 

Bladetown

Mitglied
ich habe es nochmal so versucht, aber auch da bekomme ich immer einen Rowindex von "0"

Java:
	public void mouseClicked(MouseEvent arg0) {
		
			rowIdx = jtView.getSelectedRow();		
		
	}
 

Bladetown

Mitglied
na das ist doch schonmal ein Fortschritt ;D allerdings ist das immer die erste Zeile, ich muss trotzdem irgendwie die aktuell in der Tabelle selektierte Zeile (den Index davon) ausgeben.

Aber das direkte Ausgeben der aktuell selektierten Row, funzt leider noch nicht...
Was fehlt denn da noch?!?

Muss ich mit einer Zählschleife erst die gesamte Tabellle durchgehen, das wäre doch dann sinnlos!??!?

HILFEEEEE ;D
 

Michael...

Top Contributor
getSelectedRow liefert die erste selektierte Zeile einer JTable, warum bei Dir immer 0 zurückgeliefert wird, kann unzählige Gründe haben, die an unterschiedlichsten Stellen in Deinem Code liegen können.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Wie kann ich eine Jtable mit Inhalt einer SQL Abfrage füllen Datenbankprogrammierung 14
D Zweckmäßigkeit einer Schlüsseltabelle Datenbankprogrammierung 4
TH260199 Java-Programm. Probleme bei der Umsetzung von einer Kontaktverwaltung. Datenbankprogrammierung 7
S Variable in main soll mit der generierten Zahl aus einer Methode ausgefüllt werden Datenbankprogrammierung 3
N Oracle SQL - Nächst kleineren Namen2 zu einem Namen aus einer Tabelle Datenbankprogrammierung 3
T Datenbank auf einer Webseite aus einer Exceltabelle erstellen Datenbankprogrammierung 5
D JPA gleiche methode funktioniert an einer Stelle, an der anderen nicht Datenbankprogrammierung 3
nonickatall MySQL Auf neue Datensätze in einer Datenbank reagieren Datenbankprogrammierung 5
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
P Verbindung zu einer Access Datenbank per Eclipse oder Intellij Datenbankprogrammierung 0
pkm Frage zu Encodingproblem bei einer Datenbankanbindung Datenbankprogrammierung 1
B Frage bei einer SQL Query Datenbankprogrammierung 3
F Mapping einer SQL Abfrage in eine Klasse Datenbankprogrammierung 4
J In einer bestimmten Spalte suchen mit Suchfeld (MS SQL) Datenbankprogrammierung 7
S Verbindung von einer Excel Datei zu Java Datenbankprogrammierung 2
J Sql Anfrage nach einer Zeile beenden Datenbankprogrammierung 6
J Welche Kriterien haben Einfluss auf die Geschwindigkeit einer Datenbank ? Datenbankprogrammierung 4
S Anmelden an einer msql datennbank Datenbankprogrammierung 1
F Auslesen einer .dbf-Datei, Zuordnung Index Datenbankprogrammierung 0
ralfb1105 Oracle Zwei ojdbc Driver in einer Applikation? Datenbankprogrammierung 13
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
Dimax MySQL 10 höchsten Werte aus einer Tabelle ermitteln Datenbankprogrammierung 30
L Speicherverbrauch Java Anwendung mit einer Datenbankanbindung Datenbankprogrammierung 19
temi Wie kann ich "Class" in einer DB speichern? Datenbankprogrammierung 2
F UPDATE - Befehl nur in einer Zeile Datenbankprogrammierung 11
I Oracle Wie ermitteln, welche Benutzer-(!)Tabellen in einer DB sind? Datenbankprogrammierung 1
DaCrazyJavaExpert Derby/JavaDB Wert einer Variable in der Datenbank direkt auf 1 setzten. Datenbankprogrammierung 71
D MySQL Suche nach Max Value in einer Tabelle Datenbankprogrammierung 7
W Daten aus einer Datei von einem VServer auslesen Datenbankprogrammierung 1
F MySQL Wie kann ich in Java Datensätze aus einer MySQL Datenbank gezielt in einzelne Arrays schreiben? Datenbankprogrammierung 9
F Java Objekte in einer Datenbank speichern Datenbankprogrammierung 4
MrSnake Hilfe bei erstellen einer DB Datenbankprogrammierung 12
M Wie übergebe ich Datenbankobjekte aus einer sql-Datenbank einer Java Klasse bzw. Instanz Datenbankprogrammierung 7
Z Finde den Fehler: Daten aus einer Access-Datenbank lesen Datenbankprogrammierung 12
D Aktualisierung einer ListView mit Daten aus MySQL-DB Datenbankprogrammierung 5
E Wie kann man mit einer ID-Spalte über eine Parameterübergabe auf eine Seite verweisen? Datenbankprogrammierung 17
E Warum funktioniert das Erzeugen einer View nicht? Datenbankprogrammierung 1
E Kann man in einer if-Bedingung auch SELECT-Statements überprüfen? Datenbankprogrammierung 23
E Was sind die Vorteile von DB2 im Gegensatz zu einer Oracle-Datenbank? Datenbankprogrammierung 5
E Wie geschieht der konzeptueller Entwurf einer Datenbank Datenbankprogrammierung 1
I SQLite Objekt speichern einer Serialisierter Klasse Datenbankprogrammierung 1
D HSQLDB INSERT INTO in einer For Schleife mit selber ID, machbar? Alternative? Datenbankprogrammierung 7
I Inhalt einer hsqldb anzeigen Datenbankprogrammierung 1
J Realisierung einer DB in Combi mit Java Datenbankprogrammierung 13
Androbin [Serializing] Mehrere Objekte in einer einzigen Datei speichern Datenbankprogrammierung 1
S Auswahl einer Datenbank Datenbankprogrammierung 0
M Derby/JavaDB Speicherplatz einer Zeile bestimmen Datenbankprogrammierung 0
P JPA in einer größeren Java SE Anwendung Datenbankprogrammierung 0
R MySQL Blob aus DB auslesen und einer Tabelle ausgeben Datenbankprogrammierung 7
C H2 Syntax fehler beim erstellen einer Tabelle Datenbankprogrammierung 4
L MySQL Uhrzeit-Format innerhalb einer Tabelle Datenbankprogrammierung 8
2 MySQL Daten aus einer Array auslesen und MySQL Statment erstellen. Datenbankprogrammierung 5
S Derby/JavaDB Probleme beim anlegen einer embedded DB Datenbankprogrammierung 13
E Daten einer SQL-Datenbank aus Combobox in labels schreiben Datenbankprogrammierung 6
M Problem beim Erstellen einer Query Datenbankprogrammierung 7
L Datenbankabfrage mit einer Range Datenbankprogrammierung 3
S Anbindung einer Datenbank an Java Datenbankprogrammierung 7
H ResultSet is closed tritt bei JSF aber nicht bei einer Java-Applikation auf Datenbankprogrammierung 10
eskimo328 Datenbankverbindung ohne Passwort im Quelltext bei einer offline Anwendung Datenbankprogrammierung 14
C unverständliches DB Problem (Es ist kein temporärer Systemtabellenbereich mit einer ausreichenden..) Datenbankprogrammierung 5
A Oracle Update Befehl in Datenbank anhand einer Schleife Datenbankprogrammierung 8
Kenan89 Oracle Daten einer Tabelle in Array speichern Oracle Datenbankprogrammierung 10
S 2 Tabellen zu einer zusammenführen, INSERT INTO Fehler Datenbankprogrammierung 5
D Sperrverfahren in einer Datenbank Datenbankprogrammierung 6
B Feld in einer @Entity als Text speichern Datenbankprogrammierung 5
G Oracle Hibernate M:N-Beziehung mit nur einer vorhandenen Tabelle Datenbankprogrammierung 5
M MySQL Auto-Increment einer custom formatted id? Datenbankprogrammierung 2
F Oracle ResultSet zu einer HashMap<Integer, String[]> Datenbankprogrammierung 6
M DB: Mehrere Zeilen in einer Zeile zusammenführen Datenbankprogrammierung 10
D Probleme bei der Erzeugung einer Tabelle Datenbankprogrammierung 15
D Frage zu potenziellen Leerzeichen in einer Datenbank Datenbankprogrammierung 5
H datantyp einer variable ermittel mit sql Datenbankprogrammierung 3
I Zugriff auf Datenbank nach Erstellen einer Executable Jar Datei verweigert Datenbankprogrammierung 10
S Problem beim Anlegen einer Tabelle Datenbankprogrammierung 5
S Wie überprüfe ich ob die Instanz einer Connection gerade werwendet wird? Datenbankprogrammierung 4
M Ausgabe der Rows mit höchstem Wert X einer Gruppe y,z ? Datenbankprogrammierung 2
L Derby/JavaDB Fehler beim Erstellen einer Tabelle Datenbankprogrammierung 2
turmaline [Hibernate] @OneToOne: Löschen einer referenzierten Instanz Datenbankprogrammierung 2
S ResultSet einer Datenbankabfrage - Nullpointer Exception Datenbankprogrammierung 13
B Aktuellen Stand der Datensätze einer Datenbank anzeigen Datenbankprogrammierung 9
B Die Anzahl der Datensaetze einer Datenbank anzeigen Datenbankprogrammierung 2
T Ablage von Benutzereinstellungen in einer DB Datenbankprogrammierung 7
T Inhalt einer Datenbanktabelle autom. in XML ausgeben Datenbankprogrammierung 7
M Oracle Probleme mit dem anbinden einer Oracle 10g Datenbank Datenbankprogrammierung 27
C Hibernate Liste mit allen Objekten einer Entity Datenbankprogrammierung 17
M Sinnvoller Entwurf einer Java DB-Anwendung Datenbankprogrammierung 2
E MySQL Befüllen einer MySQL DB mit großen Daten Datenbankprogrammierung 6
Airwolf89 Spaltennamen einer Tabelle zurückgeben lassen Datenbankprogrammierung 9
1 Aufruf einer View über Java Gui Datenbankprogrammierung 5
J Mit einer Abfrage Worte suchen die in Zwei Tabellen enthalten sind Datenbankprogrammierung 5
M FindBugs und PreparedStatement aus einer Datei lesen Datenbankprogrammierung 11
M Bitte um Hilfe bei Wahl einer Datenbank Datenbankprogrammierung 3
J zufällige Auswahl aus einer Tabelle Datenbankprogrammierung 4
F Problem mit einer Sql Index Datenbankprogrammierung 2
Joy jdbcodbc brücke - einbinden einer Datenbank in Java Datenbankprogrammierung 4
S Daten einer Tabelle vergleichen und ggs neuen Wert einfügen Datenbankprogrammierung 8
T Spalten einer SQL-Anfrage vorhersagen Datenbankprogrammierung 6
X Daten einer DatenbankTabelle in JTable darstellen Datenbankprogrammierung 13
A Datenbankverbindung mit einer Datenbank auf einem Webspace Datenbankprogrammierung 10
J SQL Abfrage: Verschiedene Werte in einer Spalte mit einem Update Befehl? Datenbankprogrammierung 7

Ähnliche Java Themen

Neue Themen


Oben