bin ziemlicher anfänger im programmieren und habe folgendes problem:
ich habe ein jcombobox mit daten aus einer mysql datenbank befüllt. in der datebank gibt es 2 tabelle: restaurant und locations. restaurant ist über einen foreign key mit locations verknüpft. In locations gibts eine id spalte (primärschlüssel) und location (orte)
so nun zum eigentlichen problem:
ich befülle eine combobox mit den werten aus location, also nur dem namen der tabelle. wenn ich nun einen neuen datensatz anlegen will, muss ich natürlich einen ort auswählen. die combobox soll mir nun aber die id zurückliefern, damit mein insert into statement funzt...
wie geht das? mit "getselecteditem" oder "getindex" funzt es nicht, weil ich einen int als rückgabewert brauche und keinen string.
Ich würde an Deiner Stelle eine eigene Klasse schreiben, die neben einem String auch einen Integer-Wert speichert. Beim Auslesen aus der Datenbank füllst Du dann die JCombobox einfach mit diesen Klassen, vorher Name und ID natürlich aus der Datenbank nehmen und in Deine eigens geschriebene Klasseninstanzen hauen.
Immer dran denken: JCombobox nimmt nicht explizit String auf, sondern Objekte. Für die Darstellung wird im Normalfall einfach das Ergebnis von toString() genommen. Ach, hier mal Beispiel, einmal für die Klasse:
Und wenn Du Dir die IDs in einfach einem Array abspeicherst (Index des Arrays entspräche Index in der ComboBox)?
Das ist natürlich sehr simpel gedacht, aber das erste was mir dazu einfiele.
jawoll, besten dank leute. hat wunderbar funktioniert!!!
jetzt spiele ich mich noch etwas mit meinem jtable (von markierter reihe die daten auslesen), falls ich nicht zurecht komme, melde ich mich wieder.
sorry leute, da war ich wohl zu schnell:
ich verwende dieselbe combobox noch in einem anderen frame wo mir ein jtable angezeigt wird.
jetzt möchte ich den jtable nach dem namen oder id (das ist jetzt egal) filtern, jedoch weiß ich nicht mit welchem eventlistener ich das machen soll.
actionlistener funktioniert aus irgendeinem grund nicht. der jtable soll sobald ich einen ort gewählt/angeklickt, habe sich aktualisieren. die abfrage hierzu hab ich schon, es geht wirklich rein nur um den eventlistener. habe schon fast alle ausprobiert, mousover, mouseclicked, propertychanged,...
habe nämlich auch einen button "show all" eingebaut und bei den meisten mouselistenern wird der event gestartet sobald ich mit der mouse über combobox drüberfahre.
das ich mehrere wählen kann ist klar, weiß nur nicht welche ich hier kombinieren soll?!
Ist die ComboBox editierbar oder nicht? Wenn sie nicht editierbar ist, funktioniert der ActionListener auf jeden Fall so wie man es erwartet. Wenn sie editierbar ist, kann die Erwartung schon von den Tatsachen abweichen. In jedem Fall ist Dein Fehler bestimmt nicht ein fehlender ActionEvent. Erklär mal genauer wie der ActionListener nicht funktioniert; wird er nicht aufgerufen?
und als fehlermeldung erhalte ich:
18.06.2009 00:02:07 restaurantadministration.view.restaurantsJFrame initComponents
SCHWERWIEGEND: null
java.sql.SQLException: Operation not allowed after ResultSet closed
nur hab ich keine ahnung wo in meinem code ResultSet closed sein sollte?! verwende eine ähnliche abfrage um den jtable ein start des programms zu füllen.
wenn ich den code wie oben beschrieben bei einem anderen listener einfüge, funktionierts, nur eben halt nicht so wie ich (geschweige denn mein professore) sich das vorstelle
hm, wie könnte ich dieses problem denn sonst noch lösen? die anforderung lautet:
- möglichkeit, diese auflistung nach dem ort zu filtern...
aber komischerweise habe ich im gleichen frame einen button "aktualisieren" eingebaut, der mir die liste nach hinzufügen eines neuen restaurants aktualisiert und dies funktioniert auch. ist die komplett gleiche abfrage wie beim starten des programms.
nur beim "nach orte filtern" habe ich noch eine where bedingung angehängt, ansonsten ist sie gleich... ich verstehs nicht... ???:L
ist die komplett gleiche abfrage wie beim starten des programms. nur beim "nach orte filtern" habe ich noch eine where bedingung angehängt... ich verstehs nicht...
An der WHERE-Clause liegt es nicht im eigentlichen SELECT-Statement liegt es auch nicht. Es liegt nur daran, dass Du die JDBC-Klassen nicht richtig verwendest. In welcher Weise Du das genau falsch machst kann ich nicht sagen, da dies weder aus der Fehlermeldung noch aus dem Quelltextausschnitt genau hervorgeht.
Wo wird denn stm erzeugt? Wurde das ggf. schonmal verwendet? Hast Du mal in das Tutorial geschaut, da gibt es ganz einfache Beispiele die alle funktionieren.