foreignkey abfragen und speichern

didi577

Bekanntes Mitglied
Hallo,

ich möchte aus einer Tabelle die Bezeichnungsspalte anzeigen aber dessen key in einer anderen Tabelle speichern. Ich lade die Tabelle in eine Combobox:
Java:
public void ladenBoxDozent(DefaultComboBoxModel boxDozent, String sql) {

       PreparedStatement pst = null;
       ResultSet rs = null;

       try {
           pst = con.prepareStatement(sql);
           rs = pst.executeQuery();
           while (rs.next()) {
               boxDozent.addElement(rs.getString(1));
           }

       } catch (SQLException e) {
           StringWriter s = new StringWriter();
           e.printStackTrace(new PrintWriter(s));
           System.out.println(s.toString());

       } finally {
           if (rs != null && pst != null) {
               try {
                   rs.close();
                   pst.close();
               } catch (SQLException e) {
                   e.printStackTrace();
               }
           }
       }
   }
das funktioniert gut. Die Auswahl dieser Combobox speicher ich mit anderen Daten in einer anderen Tabelle ab. Ich will aber nicht das Bezeichnungsfeld aus der Combobox speichern sondern die ID dieses Datensatzes. Ich habe die andere Tabelle schon soweit vorbereitet dass ich für die Spalten foreignkeys hinterlegt habe. Wie muss ich die Abfrage oder umbauen um den foreignkey statt der Spalte Bezeichnung abzuspeichern?
 

Joose

Top Contributor
Anstatt nur den Bezeichner der ComboBox hinzuzufügen, würde Dozent Objekte hinzufügen. Diese Objekte enthalten alle benötigten Daten, wenn ein Item dann selektiert wurde kannst du von dem selektierten Dozent Objekt mittels setter ganz einfach die ID abfragen.
 

didi577

Bekanntes Mitglied
Danke, für deinen Hinweis. (Sorry, ich habe aber den falschen Code gesendet) Bislang habe ich immer in den Spalten alle Bezeichnungen gespeichert aber ich glaube vor dem Hintergrund normalisierter DB ist es auf Dauer performanter die IDs zu speichern.
Nun, zur Umsetzung. In der GUI rufe ich "boxenLaden()" beim Fensterstart auf:
Java:
mysql.boxenLaden(boxDozentM, "select name from dozenten ORDER BY name");
das ist boxenLaden():
Java:
    public void boxenLaden(DefaultComboBoxModel boxModel, String sql) {

       PreparedStatement pst = null;
       ResultSet rs = null;

       try {

           pst = con.prepareStatement(sql);
           rs = pst.executeQuery();
           while (rs.next()) {
               boxModel.addElement(rs.getString(1));
           }
       } catch (SQLException e) {
           StringWriter s = new StringWriter();
           e.printStackTrace(new PrintWriter(s));
           System.out.println(s.toString());

       } finally {
           if (rs != null && pst != null) {
               try {
                   rs.close();
                   pst.close();
               } catch (SQLException e) {
                   e.printStackTrace();
               }
           }
       }
   }

das sind die zugehörigen Widgets in der GUI:
Java:
boxDozentM = new DefaultComboBoxModel();
       boxDozent = new JComboBox(boxDozentM);

wo muss ich hier ansetzen um deinen Vorschlag umzusetzen?
 

didi577

Bekanntes Mitglied
puh ich kämpfe...
ich glaube das verschiebe ich noch etwas bis ich fitter in dem Thema bin

kann man sowas nachträglich umstellen?
 

Joose

Top Contributor
Was umstellen? Man kann nachträglich vieles anpassen/umstellen, die Frage ist lohnt sicher der Aufwand gegenüber dem Gewinn?
 

didi577

Bekanntes Mitglied
mit umstellen meine ich auf die Arbeit mit foreign keys und einer normalisierten DB. mir fehlt die Erfahrung ob es sich lohnt diesen Aufwand zu betreiben oder damit zu leben dass Namen und Orte ggf. hundertfach in der DB auftauchen statt deren keys
 

JAVAKEK

Mitglied
damit zu leben dass Namen und Orte ggf. hundertfach in der DB auftauchen statt deren keys

Da hast du doch schon deine Antwort ;) "Beiss" dich durch das Thema durch und mache es von Anfang an ordentlich. Im moment fügst du lediglich die Namen zu der ComboBox hinzu. Wie du schon bemerkt hast fehlt dir an der Stelle der key. Passe deine SQL so an, dass du nicht nur den namen bekommst sondern auch den key des Dozenten. Wenn du dann das Ergebnis des Selects durchläufst, erstellst du dir ein Dozent Objekt, welches die relevanten Attribute enthält die du benötigst.
Dann kannst du das gesamte Dozenten Objekte als Element zur Box hinzufügen.
Hier ist nochmal ein Teil veranschaulicht:
http://stackoverflow.com/questions/17887927/adding-items-to-a-jcombobox
 

Joose

Top Contributor
mit umstellen meine ich auf die Arbeit mit foreign keys und einer normalisierten DB. mir fehlt die Erfahrung ob es sich lohnt diesen Aufwand zu betreiben oder damit zu leben dass Namen und Orte ggf. hundertfach in der DB auftauchen statt deren keys

Der Aufwand lohnt sich auf jedenfall, ein nachträgliches normalisieren is zwar machbar aber auch mit viel Arbeit verbunden.
Dein jetztiges Problem wird sein wenn du mal den Namen ändern willst, musst du alle Tabellen durchgehen, schauen wo der Name vorkommt und ihn ändern (sofern der Key auch dazu passt)
 

didi577

Bekanntes Mitglied
Moin,

Danke für eure Hinweise. Werde mich übers Wochenede einschließen und basteln.

Habe noch eine Baustelle in diesem Projekt. Ich erstelle Auswertungen die in einer GUI angezeigt werden und die ich dann per Mail versenden möchte. Für den Mailversand wurde mir hier ein Code empfohlen den ich übernommen und etwas angepasst habe:
Java:
package auswertung;


import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * @author zeja
 */
public class Mail {


   public void sendMail(String smtpHost, String username, String password, String senderAddress,
           String recipientsAddress, String subject, String text) {
       MailAuthenticator auth = new MailAuthenticator(username, password);

       Properties properties = new Properties();

       // Den Properties wird die ServerAdresse hinzugefügt
       properties.put("mail.smtp.host", smtpHost);
   

       // !!Wichtig!! Falls der SMTP-Server eine Authentifizierung
       // verlangt
       // muss an dieser Stelle die Property auf "true" gesetzt
       // werden
       properties.put("mail.smtp.auth", "true");
       properties.put("mail.smtp.starttls.enable", "true");

       // Hier wird mit den Properties und dem implements Contructor
       // erzeugten
       // MailAuthenticator eine Session erzeugt
       Session session = Session.getDefaultInstance(properties, auth);

       try {
           // Eine neue Message erzeugen
           Message msg = new MimeMessage(session);

           // Hier werden die Absender- und Empfängeradressen gesetzt
           msg.setFrom(new InternetAddress(senderAddress));
           msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientsAddress, false));

           // Der Betreff und Body der Message werden gesetzt
           msg.setSubject(subject);
           msg.setText(text);

           // Hier lassen sich HEADER-Informationen hinzufügen
           msg.setHeader("Test", "Test");
           msg.setSentDate(new Date());

           // Zum Schluss wird die Mail natürlich noch verschickt
           Transport.send(msg);

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

   class MailAuthenticator extends Authenticator {
       
       /**
        * Ein String, der den Usernamen nach der Erzeugung eines Objektes<br>
        * dieser Klasse enthalten wird.
        */
       private final String user;

       /**
        * Ein String, der das Passwort nach der Erzeugung eines Objektes<br>
        * dieser Klasse enthalten wird.
        */
       private final String password;

       /**
        * Der Konstruktor erzeugt ein MailAuthenticator Objekt<br>
        * aus den beiden Parametern user und passwort.
        *
        * @param user
        *            String, der Username fuer den Mailaccount.
        * @param password
        *            String, das Passwort fuer den Mailaccount.
        */
       public MailAuthenticator(String user, String password) {
           this.user = user;
           this.password = password;
       }

       /**
        * Diese Methode gibt ein neues PasswortAuthentication Objekt zurueck.
        *
        * @see javax.mail.Authenticator#getPasswordAuthentication()
        */
       protected PasswordAuthentication getPasswordAuthentication() {
           return new PasswordAuthentication(this.user, this.password);
       }
   }

   public static void main(String[] args) {

       String username = "xxx";
       String password = "xxx";
       String senderAddress = "xxx";// someone@web.de
       String recipientsAddress = "xxx"; // somereceiver@web.de
       String subject = "Schulungsauswertung";
       String text = "Hallo ..., du hast am eine Schulung durchgeführt.";
       String smtpHost = "smtp.gmail.com";

       new Mail().sendMail(smtpHost, username, password, senderAddress, recipientsAddress, subject, text);
   }
}

das funktioniert so als Klasse. Es werden Mails versendet. Ich möchte den Versend aber mit Klick auf einen Button erreichen. D.h. die main Methode muss raus und ich muss den Versand in den ActionListener des Button (bereits vorhanden) verlagern. Wie stelle ich das am besten an?
 

Joose

Top Contributor
Wo genau liegt das Problem nun? Die main-Methode ist nichts anderes als ein Startpunkt ;) von welchem du ganz normal Objekte erstellen kannst und deren Methoden aufrufen kannst. Du könntest die main-Methode ganz einfach mit der "actionPerformed" des ActionListener deines Buttons ersetzen.
Was hindert dich daran im ActionListener des Buttons einfach ein Mail-Objekt zu erstellen und von diese die sendMail Methode aufzurufen?
 

didi577

Bekanntes Mitglied
ich bin jetzt wieder bei meinem anfangs beschriebenen Datenbankproblem. Ich habe jetzt wie von @AG10 empfohen eine Klasse aufgemacht (für eine andere Tabelle erstmal, sie hat drei Spalten):
Java:
public class KursElemente {
   
   private String kurs_id;
   private String kursnr;
   private String bezeichnung;
   
   public KursElemente(String kurs_id, String kursnr, String bezeicnung) {
       
       this.kurs_id = kurs_id;
       this.kursnr = kursnr;
       this.bezeichnung = bezeicnung;
       
   }
   
   public String toString() {
       
       return kurs_id;
   }
   
   public String getKurs_Id() {
       
       return kurs_id;
   }
   
   public String getKursnr() {
       
       return kursnr;
   }
   
   public String getBeeichnung() {
       
       return bezeichnung;
   }

}
dazu habe ich die SQL angepasst (ich möchte alle drei Spalten im Objekt speichern):
Java:
public void boxKursLaden(DefaultComboBoxModel boxKursM, String sql) {

       PreparedStatement pst = null;
       ResultSet rs = null;

       try {

           pst = con.prepareStatement(sql);
           rs = pst.executeQuery();
           while (rs.next()) {
               boxKursM.addElement(new KursElemente(rs.getString(0), rs.getString(1), rs.getString(2)));
               System.out.println(rs.getString(1));
           }
       } catch (SQLException e) {
           StringWriter s = new StringWriter();
           e.printStackTrace(new PrintWriter(s));
           System.out.println(s.toString());

       } finally {
           if (rs != null && pst != null) {
               try {
                   rs.close();
                   pst.close();
               } catch (SQLException e) {
                   e.printStackTrace();
               }
           }
       }
   }
hier ist der Aufruf wenn ich in der GUI die Box laden möchte:
Java:
mysql.boxKursLaden(boxKursM, "select kursnr from kurse ORDER BY kursnr");

das klappt nur noch nicht. ich möchte die Spalte kursnr in der Combobox angezeigt bekommen, beim Programmstart kommt ein SQL Fehler:
java.sql.SQLException: Column Index out of range, 0 < 1.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:964)....

diese Zeile scheint das Problem zu sein:
Java:
               boxKursM.addElement(new KursElemente(rs.getString(0), rs.getString(1), rs.getString(2)));

wo ist mein Fehler? ich komme leider nicht weiter :(
 

Meniskusschaden

Top Contributor
Du versuchst auf drei Spalten zuzugreifen, obwohl du dir nur eine geholt hast.

EDIT: Ausserdem beginnt die Zählung bei 1 und nicht bei 0.
 
Zuletzt bearbeitet:

didi577

Bekanntes Mitglied
ok, Danke

habe die Abfrage angepasst:
Java:
public void boxKursLaden(DefaultComboBoxModel boxKursM, String sql) {

       PreparedStatement pst = null;
       ResultSet rs = null;

       try {

           pst = con.prepareStatement(sql);
           rs = pst.executeQuery();
           while (rs.next()) {
               boxKursM.addElement(new KursElemente(rs.getString(1), rs.getString(2), rs.getString(3)));
               System.out.println(rs.getString(1));
           }
       } catch (SQLException e) {
           StringWriter s = new StringWriter();
           e.printStackTrace(new PrintWriter(s));
           System.out.println(s.toString());

       } /*finally {
           if (rs != null && pst != null) {
               try {
                   rs.close();
                   pst.close();
               } catch (SQLException e) {
                   e.printStackTrace();
               }
           }
       }*/
   }

was muss ich in der select anpassen?
Java:
mysql.boxKursLaden(boxKursM, "select kurse from kurse ORDER BY kursnr");

ich möchte vom Kurselement in der Combobox nur die Spalte kursnr angezeigt bekommen

egal wierum ich es erfasse ich bekoome immer sql Exceptions
 

JAVAKEK

Mitglied
Mit try&error kommt man irgenwann nicht mehr weiter. Du musst auch ein wenig verstehen was du da tippst. Probiere mal die Fragen zu beantworten, dann kommst du selber auf die Antwort was falsch ist:

Was passiert hier?
rs.getString(1), rs.getString(2), rs.getString(3)

Was bekommst du bei dem Query als Result?
select kurse from kurse ORDER BY kursnr
 

didi577

Bekanntes Mitglied
hi, ich komme leider erst jetzt wieder dazu

klar ich verstehe noch nicht alles, arbeite mich aber immer weiter ein

so ich habe jetzt ein Ergebnis ;-), habe in der select jetzt die anderen Spalten aufgenommen:

"select kurse_id, kursnr, bezeichnung from kurse ORDER BY kursnr"

das hatte ich vorher auch schon probiert nur leider immer einen Tippfehler in einer Spaltenbezeichnung und daher Fehler :mad:

wie kann ich steuern dass die Spalte kursnr in der Combobox angezeigt wird? ich habe diese Spalte in der select mal an die erste Stelle gesetzt, dann wird die kursnr auch angezeigt aber ist das auch der richtige Weg?
 

Meniskusschaden

Top Contributor
Kann es sein, dass du deinen eigenen Code nicht verstanden hast?;)
In der Combo-Box erscheint das, was die toString-Methode des dort gespeicherten Objektes zurück liefert. Die Reihenfolge der Spalten des ResultSets entspricht der Reihenfolge der Spalten des Select-Statements.
 

Joose

Top Contributor
Anmerkung zu deiner Klasse "KursElemente":

Eine Klasse beschreibt einen Gegenstand genauer bzw. ist der Bauplan für ein Objekt. Betonung liegt hier auf "einen" bzw. "ein".
Sprich du solltest die Klasse in "KursElement" umbenennen. Da ein Objekt davon auch nur ein Element beschreibt.
Und vermeide "_" in Klassen, Attributen und Methodenamen.

In der Methode "boxKursLaden" steht folgender Code:
Java:
       } catch (SQLException e) {
           StringWriter s = new StringWriter();
           e.printStackTrace(new PrintWriter(s));
           System.out.println(s.toString());
Gibt es einen Grund warum du einen StringWriter erstellst usw.? Warum schreibst du nicht einfach e.printStackTrace(); und fertig?
 

didi577

Bekanntes Mitglied
Hallo,

habe die DB angepasst und speichere jetzt den key. Meine speichern routine muss sicher angepasst werden da ich ja bislang den Inhalt der Combobox ausgelesen habe:
Java:
mysql
               .speichern(boxKurs.getSelectedItem()...
jetzt habe ich ja die Objekte in der Combobox
Java:
boxKursM.addElement(new KursElemente(rs.getString(1), rs.getString(2), rs.getString(3)));
           }
die in der Box angezeigt werden. String 1 wird in der Box angezeigt und String 2 will ich speichern. Wenn ich den Code so belasse speichert er immer 1 egal welchen Comboboxeintrag ich ausgewählt habe. Ich vermute dass ich "(boxKurs.getSelectedItem()" und "KursElemente" mit "getKurs_id" zusammenbringen muss.
Kann mir jemand helfen?;)
 

Joose

Top Contributor
die in der Box angezeigt werden. String 1 wird in der Box angezeigt und String 2 will ich speichern. Wenn ich den Code so belasse speichert er immer 1 egal welchen Comboboxeintrag ich ausgewählt habe. Ich vermute dass ich "(boxKurs.getSelectedItem()" und "KursElemente" mit "getKurs_id" zusammenbringen muss.
Kann mir jemand helfen?;)

DefaultComboBoxModel ist generisch, wenn du als generischen Typ deine Klasse KursElement angibst dann bekommst du "getSelectedItem()" ein KursElement zurück von welchem du dann die entsprechende getter Methode aufrufen kannst.
https://docs.oracle.com/javase/7/docs/api/javax/swing/DefaultComboBoxModel.html
 

didi577

Bekanntes Mitglied
hm...??
ich muss die KursElement Klasse so definieren?:
Java:
public class KursElement <K>

in das DefaultComboboxModel so kennzeichnen?:
Java:
    boxKursM = new DefaultComboBoxModel<K>();

nee das funktioniert nicht

mit der API tue ich mich sehr schwer, grundsätzlich glaube ich was gemeint ist, ich habe nur noch keinen Ansatz wie ich dem Model sage dass die Klasse KursElement die Daten liefert ?!
 

Joose

Top Contributor
ich muss die KursElement Klasse so definieren?:
Java:
public class KursElement <K>
Nein so machst du die Klasse KursElement generisch, du sollst aber der schon generische Klasse "DefaultComboBoxModel" den Typparameter angeben.

in das DefaultComboboxModel so kennzeichnen?:
Java:
    boxKursM = new DefaultComboBoxModel<K>();

mit der API tue ich mich sehr schwer, grundsätzlich glaube ich was gemeint ist, ich habe nur noch keinen Ansatz wie ich dem Model sage dass die Klasse KursElement die Daten liefert ?!
DefaultComboBoxModel<KursElement> boxKursM = new DefaultComboBoxModel<KursElement>();
Das selbe Prinzip wie bei der ArrayList (die auch generisch ist) ;)
 

didi577

Bekanntes Mitglied
oh Danke, die LIste meiner Nacharbeiten zum "verstehen" wird immer länger ;)

jetzt meckert er aber die Zeile danach an:
Java:
boxKurs.setModel(boxKursM);
ich muss doch aber das Model setzen, oder?
 

didi577

Bekanntes Mitglied
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method setModel(ComboBoxModel<String>) in the type JComboBox<String> is not applicable for the arguments (DefaultComboBoxModel<KursElement>)
 

Joose

Top Contributor
Dann schau dir mal an wie deine JComboBox deklariert ist und schau dir die entsprechende Dokumentation bzw. den Code der JComboBox an.
So sollte dir einleuchten was das Problem ist ;)
 

didi577

Bekanntes Mitglied
erledigt ;) war die Deklaration

jetzt kommt eine NPE Meldung

an der Stelle:

Java:
    boxKursM.addElement(new KursElement(rs.getString(1), rs
                       .getString(2), rs.getString(3)));

ist in der SQL die Zeile nach der while Schleife
 

didi577

Bekanntes Mitglied
die NPE kommt erst seitdem ich den generischen Typ angegeben habe, die anderen Boxen (ohne generischen Typ) werden geladen
warum ist boxKursM bzw, rs aufeinmal null?
 

JAVAKEK

Mitglied
Falls du noch dein while (rs.next()) { drin hast und sollte rs eig. nicht null sein. Poste nochmal dein Code wie er momentan aussieht.
 

didi577

Bekanntes Mitglied
Die Abfrage:
Java:
public void boxKursLaden(DefaultComboBoxModel boxKursM, String sql) {

       PreparedStatement pst = null;
       ResultSet rs = null;

       try {

           pst = con.prepareStatement(sql);
           rs = pst.executeQuery();
           while (rs.next()) {
               boxKursM.addElement(new KursElement(rs.getString(1), rs
                       .getString(2), rs.getString(3)));
           }
       } catch (SQLException e) {
           e.printStackTrace();

       } finally {
           if (rs != null && pst != null) {
               try {
                   rs.close();
                   pst.close();
               } catch (SQLException e) {
                   e.printStackTrace();
               }
           }
       }
   }
der Aufruf:
Java:
    mysql.boxKursLaden(boxKursM, "select kursnr, kurse_id, bezeichnung from kurse ORDER BY kursnr");

die Combobox:
Java:
       boxKurs = new JComboBox();
       DefaultComboBoxModel<KursElement> boxKursM = new DefaultComboBoxModel<KursElement>();
       boxKurs.setModel(boxKursM);
die Klasse des KursElement
Java:
public class KursElement {
   
   private String kurs_id;
   private String kursnr;
   private String bezeichnung;
   
   public KursElement(String kurs_id, String kursnr, String bezeicnung) {
       
       this.kurs_id = kurs_id;
       this.kursnr = kursnr;
       this.bezeichnung = bezeicnung;
       
   }
   
   public String toString() {
       
       return kurs_id;
   }
   
   public String getKurs_Id() {
       
       return kurs_id;
   }
   
   public String getKursnr() {
       
       return kursnr;
   }
   
   public String getBezeichnung() {
       
       return bezeichnung;
   }

}

bevor ich diesen Part eingefügt habe ging es:
Java:
DefaultComboBoxModel<KursElement> boxKursM = new DefaultComboBoxModel<KursElement>();
 

Joose

Top Contributor
Lass uns bitte nicht rumraten. Der StackTrace der Exception verrät genau wo der Fehler passiert.
Wenn es sich tatsächlich um boxKursM.addElement(new KursElement(rs.getString(1), rs.getString(2), rs.getString(3))); handelt, dann ist entweder rs oder boxKursM null.
rs kann es nicht sein, sonst würde er schon eine Zeile vorher die Exception werfen, als kann nur boxKursM null sein.

Nimm den Debugger deiner IDE und kontrolliere einfach deinen Code. Dort wo du boxKursLaden aufrufst übergibst du auch das Model, ist es an allen Stelle wo diese Methode aufgerufen wird initialisiert?
 

Meniskusschaden

Top Contributor
Ich vermute, dass du boxKursM zwei Mal deklariert hast (z.B. eine lokale Variable und eine Objektvariable) und dass du die Objektvariable an boxKursLaden() übergibst, aber nur der lokalen Variablen ein Objekt zugewiesen hast. Das kann man an den geposteten Ausschnitten aber nicht sehen.
 

didi577

Bekanntes Mitglied
boxKursM ist null, das hat der Debugger verraten
ich deklariere am Anfang:
Java:
private DefaultComboBoxModel<String> boxKursM
später kommt:
Java:
DefaultComboBoxModel<KursElement> boxKursM = new DefaultComboBoxModel<KursElement>();

die Methode boxKursLaden() beginnt mit:
Java:
public void boxKursLaden(DefaultComboBoxModel boxKursM, String sql) {

der Methodenaufruf:
Java:
mysql.boxKursLaden(boxKursM, "select kursnr, kurse_id, bezeichnung from kurse ORDER BY kursnr");

ich glaube hier ist etwas durcheinander..:mad:
 

Joose

Top Contributor
Wie @Meniskusschaden schon gesagt hat: du deklarierst lokal eine Variable "boxKursM" welche du initialisierst. Die Instanzvariable initialisierst du nicht, diese übergibst du dann aber an die Methode!
Lösung: statt einer lokalen Variable zu deklarieren und initialisieren, initialisiere nur das Instanzattribut

Abgesehen davon ist die Deklaration deiner Instanzvariable und deiner lokalenVariable unterschiedlich! Und die Methode boxKursLaden erwartet als Parameter einfach nur ein DefaultComboBoxModel, verwendet stattdessen als Type für den Parameter DefaultComboBoxModel<KursElement>.
 

didi577

Bekanntes Mitglied
ich denke ich habe es ...
ich deklariere jetzt:
Java:
private DefaultComboBoxModel<KursElement> boxKursM;
hier erzeuge ich das Objekt:
Java:
boxKursM = new DefaultComboBoxModel<KursElement>();

der Fehler ist weg, danke für eure Hinweise, jetzt kann ich mich endlich wieder meinem eigentlichen Problem widmen ;)
 

didi577

Bekanntes Mitglied
wenn du als generischen Typ deine Klasse KursElement angibst dann bekommst du "getSelectedItem()" ein KursElement zurück von welchem du dann die entsprechende getter Methode aufrufen kannst.
ich möchte jetzt erreichen dass die kurs_id von KursElement gespeichert wird
das ist der Aufruf der speichern Methode:
Java:
mysql
               .speichern(boxKurs.getSelectedItem(),...
setze ich hier jetzt an?
 

Joose

Top Contributor
Verwende den Debugger und kontrolliere was dir die Methode getSelectedItem zurückliefert.
Dann überlege dir was du mit diesem Rückgabewert anfangen kannst
 

didi577

Bekanntes Mitglied
kannst du mir sagen wo ich nachlesen kann wie ich den Debugger für meine Zwecke richtig einsetzen kann?
habe damit bislang noch nix gemacht
 

Joose

Top Contributor
Das Prinzip bei jedem Debugger ist eigentlich gleich: du legst mittels Breakpoint fest wo du im Code stehen bleiben willst, danach kannst du überprüfen welchen Wert die Variablen haben oder eben kontrollieren was eine Methode zurückgibt wenn sie ausgeführt wird.
Entweder gehst du dann per Prozedur- oder Einzelschritt deinen Code durch. Beim Prozedurschritt wird die aktuelle Zeile komplett ausgeführt, beim Einzelschritt debuggst du jeden einzelnen Methodenaufruf in der aktuellen Zeile.
......
 

didi577

Bekanntes Mitglied
hab mich bis dahin durchgekämpft, habe den breakpoint an der Zeile wo getSelectItem steht gesetzt und bin in den debuggModus, da gehts aber nicht weiter, die Schaltflächen zum springen sind inaktiv
 

Harry Kane

Top Contributor
Alternativ könntest du dich auch einfach darin erinnern, was du programmiert hast. Da du deine JComboBox bzw. deren ComboBoxModel mit KursElemeneten befüllst, müssen die aus dem ComboBoxModel abgefragten Objekte vom Typ KursElement sein. Du kannst also das Rückgabewert von boxKurs.getSelectedItem() auf KursElement casten und darauf die Methode getKurs_Id aufrufen:
Java:
mysql.speichern(((KursElement)boxKurs.getSelectedItem()).getKurs_Id, ...);
 

didi577

Bekanntes Mitglied
vielen Dank, der Code läuft durch, aber in der DB wird nachwievor nicht die kurs_id gespeichert sondern 1, ein
Java:
System.out.println(((KursElement)boxKurs.getSelectedItem()).getKurs_Id());
liefert die kursnr die auch in der Box angezeigt wird :mad:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Foreignkey -> Zusammengesetzt Datenbankprogrammierung 3
N Datenbank abfragen nach bestimmten Wort Datenbankprogrammierung 7
J Datenbank abfragen Datenbankprogrammierung 6
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
O SQL Abfragen mit Mini Datenbank Datenbankprogrammierung 12
M Sql Abfragen Datenbankprogrammierung 1
D 2 Abfragen zusammenfassen Datenbankprogrammierung 7
D MySQL Geburtsdatum per KW abfragen Datenbankprogrammierung 1
W Daten in Java intern abfragen Datenbankprogrammierung 1
Thallius MySQL Tabelle splitten aber wie eine abfragen? Datenbankprogrammierung 10
D geänderte SELECT Abfragen Datenbankprogrammierung 15
K Viele verschiedenen SQL Abfragen Datenbankprogrammierung 2
J SQLite ResultSet closed -- Wiederholende DB-Abfragen Datenbankprogrammierung 6
R JPA dynamisch auf NULL abfragen Datenbankprogrammierung 2
A MySQL Tabelle ID abfragen und Spalte ausgeben Datenbankprogrammierung 4
K HSQLDB Einzelne Tabellen abfragen? Datenbankprogrammierung 4
F myBatis und komplexe Abfragen Datenbankprogrammierung 3
M MySQL Spaltennamen abfragen Datenbankprogrammierung 2
B Abfragen fehlgeschlagen Datenbankprogrammierung 6
D MySQL Applet MYSQL Abfragen Sicherheit Datenbankprogrammierung 2
E Datenbank Abfragen in eine GUI schreiben Datenbankprogrammierung 8
I Tabelle mit "|" getrennten Werten -> einzelnen Wert davon abfragen Datenbankprogrammierung 15
N Daten aus Datenbank abfragen und anzeigen in der Praxis?? Datenbankprogrammierung 2
S MySQL Server Informationen abfragen Datenbankprogrammierung 6
turmaline [Hibernate] @OneToMany - Eine referenzierte Tabelle abfragen Datenbankprogrammierung 11
Burny91 SQLite ResultSetMetaData abfragen Datenbankprogrammierung 6
T Kleine Tabellen für schnellere abfragen? Datenbankprogrammierung 3
H Derby SQL-Abfragen in Datei abspeichern Datenbankprogrammierung 2
trash SQL, ganze Tabelle abfragen Datenbankprogrammierung 3
E MySQL 2 Fragen zur Syntax von SQL-Abfragen Datenbankprogrammierung 8
brainray Bei MySQL alle Datenbanken eines Servers abfragen Datenbankprogrammierung 3
N mehrere Abfragen nacheinander wie mit MS Access mit JAVA Datenbankprogrammierung 3
MQue größte id in einer Tabelle abfragen Datenbankprogrammierung 4
A Leere Zelle von einer DB abfragen Datenbankprogrammierung 3
S Abfragen auf Vorhanden Datenbankprogrammierung 23
G Mehrere Tabellen abfragen Datenbankprogrammierung 7
G SQL Abfragen hardcoded im Quelltext? Datenbankprogrammierung 15
G Prolog abfragen mit Java Datenbankprogrammierung 3
M H2 DAtenbank in .sql datei schreiben/abfragen ? Datenbankprogrammierung 3
A Abfragen, wer zur Zeit angemeldet ist Datenbankprogrammierung 3
S Datentypen einer Tabelle Abfragen? Datenbankprogrammierung 2
G Rechte abfragen Datenbankprogrammierung 8
L MySQL : Funktionsweise von '%' in Abfragen Datenbankprogrammierung 2
G INSERT abfragen ob erfolgreich? Datenbankprogrammierung 5
B Eingefügter Datensatz erneut abfragen. Datenbankprogrammierung 10
E Datentyp numeric abfragen? Datenbankprogrammierung 2
P Daten aus 2 Tabellen mit java abfragen Datenbankprogrammierung 9
F die DN eines LDAP verzeichnisses abfragen Datenbankprogrammierung 2
M Abfragen auf ResultSets Datenbankprogrammierung 3
E Einzelne SQL Abfragen, oder alles zusammen? (veraendert!!!) Datenbankprogrammierung 11
A Viele Abfragen auf einmal: Performance Datenbankprogrammierung 2
Z Zeilen-Anzahl abfragen bei Datenbank Datenbankprogrammierung 4
W RsultSet auf null abfragen funktioniert nicht Datenbankprogrammierung 4
isowiz SELECT SUM() Ergebnis in Java abfragen Datenbankprogrammierung 6
S MySQL Abfragen blockiern den Arbeitsspeicher Datenbankprogrammierung 6
G Anzahl der Datensaetze abfragen Datenbankprogrammierung 11
V Anzahl der Datensätze abfragen Datenbankprogrammierung 9
S Bereiche einer Datenbank abfragen Datenbankprogrammierung 3
N Mehrere Abfragen gleichzeitig - was passiert da? Datenbankprogrammierung 6
D Reihenfolge der Abfragen Datenbankprogrammierung 7
L mehrere Abfragen mit einem Statement!? Datenbankprogrammierung 5
G Select-Abfragen sind sehr langsam Datenbankprogrammierung 7
R Mongodb Daten in einem bestimmten Document speichern Datenbankprogrammierung 1
OnDemand Externe IDs speichern - Tabellenaufbau Datenbankprogrammierung 8
OnDemand Spring Boot Speichern in Threads Datenbankprogrammierung 6
D MYSQL goorm IDE - Wie speichern? Datenbankprogrammierung 0
T Java Spiel Daten speichern Datenbankprogrammierung 1
S Sets speichern Datenbankprogrammierung 2
S MongoDB - Abfrageergebnis in Array speichern Datenbankprogrammierung 2
B Denkanstoß bei Abschreibungstabelle in DB speichern Datenbankprogrammierung 0
temi Wie kann ich "Class" in einer DB speichern? Datenbankprogrammierung 2
Danloc Informationen für Datenbankverbindung wo/wie speichern? Datenbankprogrammierung 11
F Java Objekte in einer Datenbank speichern Datenbankprogrammierung 4
L HSQLDB Bilder in der DB speichern? Datenbankprogrammierung 6
perlenfischer1984 Java Objecte speichern mit Hibernate ? Datenbankprogrammierung 2
M byte-Array in Datenbank speichern Datenbankprogrammierung 2
I SQLite Objekt speichern einer Serialisierter Klasse Datenbankprogrammierung 1
J Dateien in MySQL speichern & indizieren Datenbankprogrammierung 2
Androbin [Serializing] Mehrere Objekte in einer einzigen Datei speichern Datenbankprogrammierung 1
S CSV File in Datenbank speichern!? Datenbankprogrammierung 1
L Werte in Datei speichern Datenbankprogrammierung 16
E MySQL Große Datenmengen reibungslos speichern für Gameserver Datenbankprogrammierung 6
M MySQL Einzelne Systeminformationen speichern Datenbankprogrammierung 2
AMStyles Kann Wert nicht speichern (MAX VALUE) Datenbankprogrammierung 9
H MySQL Datenbank-Settings speichern Datenbankprogrammierung 10
5 Image in Datenbank speichern Datenbankprogrammierung 11
Kenan89 Oracle Daten einer Tabelle in Array speichern Oracle Datenbankprogrammierung 10
pg1337 PostgreSQL Werte auf Eingabe speichern Datenbankprogrammierung 23
B Feld in einer @Entity als Text speichern Datenbankprogrammierung 5
D MySQL Bild aus DB auslesen und auf FTP Speichern Datenbankprogrammierung 7
G Oracle Speichern der Reihenfolge Datenbankprogrammierung 2
I SQL_Abfrage-Ergebnis (ResultSet) in String[] speichern Datenbankprogrammierung 29
X Connection schließen oder speichern? Performance Frage Datenbankprogrammierung 7
S Verschiedene Informationen gleichen Typs speichern und auslesen Datenbankprogrammierung 4
T Derby/JavaDB byte[] in Datenbank speichern [JPA] Datenbankprogrammierung 10
Z MySQL werte von formular speichern Datenbankprogrammierung 3
D Hibernate: ArrayList in DB speichern und auslesen Datenbankprogrammierung 4
G Lange Texte in der DB speichern Datenbankprogrammierung 3
S Textur in DB speichern Datenbankprogrammierung 7
J MySQL Hibernate: Probleme beim Speichern von OneToMany - Datensätzen Datenbankprogrammierung 2

Ähnliche Java Themen


Oben