foreignkey abfragen und speichern

ja ist echt ärgerlich
Java:
mysql
               .speichern(((KursElement)boxKurs.getSelectedItem()).getKurs_Id(),

wenn ich einen Kurs aus dem hinteren Bereich auswähle dann speichert er ein 2 ???
 
in der Combobox wird die kursnr angezeigt, wenn ich die Kurasnummern weit auseinanderliegend auswähle und speichere werden irgendwann 2, 3 oder 4 gespeichert aber nicht die Zuordnungen kurs_id zu kursnr aus der Kurstabelle
 
bislang hatte ich nur den Aufruf der mysql gepostet... hier ist mal die Methode:
Java:
public int speichern(Object boxKurs)
{

       PreparedStatement pst = null;

       try {

           pst = con
                   .prepareStatement("INSERT INTO fragen(kurs) VALUES 
 ('"
                           + boxKurs
                           + "')");
return pst.executeUpdate();
 
bislang hatte ich nur den Aufruf der mysql gepostet... hier ist mal die Methode:
Java:
public int speichern(Object boxKurs)
{
       PreparedStatement pst = null;
       try {
           pst = con.prepareStatement("INSERT INTO fragen(kurs) VALUES ('" + boxKurs + "')");
return pst.executeUpdate();

Hier fängt es schon mal an: Warum übergibst du der Methode "speichern" ein Object? Warum nicht den konkreten Typ den du in die Datenbank speichern willst?
Du solltest anfangen nachzuvollziehen was du da programmierst. Welches Objekt wird angezeigt und welches wird ausgewählt und dann an deine Methode speichern übergeben.
Hilfreich ist dabei der Debugger oder eben Log Ausgaben.

Ich glaub in deiner ComboBox werden immer noch die kurse_id angezeigt und nicht die kursnr und die Methode speichern funktioniert ohne Probleme.
 
ok, ich habe speichern gewählt da ich verschiedene Widgets auswerte und speichere
Java:
public int speichern(Object boxKurs, Object boxDozent, Object boxOrt,
           Object spinDatum, Object auswahlland, Object auswahla1,
           Object auswahla2, Object auswahla3, Object auswahla4,
           Object auswahlb1, Object auswahlb2, Object auswahlb3,
           Object auswahlc1, Object tfC14, Object auswahlc2, Object auswahlc3,
           Object auswahlc4, Object auswahlc5, Object auswahld1,
           Object auswahld2, Object auswahld3, Object tfD4, Object tfD5) {

       PreparedStatement pst = null;

       try {

           pst = con
                   .prepareStatement("INSERT INTO fragen(kurs,dozent,ort,datum,land,a1,a2,a3,a4,b1,b2,b3,c1,c1_txt,c2,c3,c4,c5,d1,d2,d3,d4_txt,d5_txt)  VALUES ('"
                           + boxKurs
                           + "','"
                           + boxDozent
                           + "','"
                           + boxOrt
                           + "','"
                           + spinDatum
                           + "','"
                           + auswahlland
                           + "','"
                           + auswahla1
                           + "','"
                           + auswahla2
                           + "','"
                           + auswahla3
                           + "','"
                           + auswahla4
                           + "','"
                           + auswahlb1
                           + "','"
                           + auswahlb2
                           + "','"
                           + auswahlb3
                           + "','"
                           + auswahlc1
                           + "','"
                           + tfC14
                           + "','"
                           + auswahlc2
                           + "','"
                           + auswahlc3
                           + "','"
                           + auswahlc4
                           + "','"
                           + auswahlc5
                           + "','"
                           + auswahld1
                           + "','"
                           + auswahld2
                           + "','"
                           + auswahld3 + "','" + tfD4 + "','" + tfD5 + "')");
           return pst.executeUpdate();

       } catch (SQLException e) {
           e.printStackTrace();
           return 0;

       } finally {
           if (pst != null) {
               try {
                   pst.close();
               } catch (SQLException e) {
                   e.printStackTrace();
               }
           }
       }
   }
das hat ja bis dato auch einwandfrei funktioniert
in der Combobox wähle ich kursnr 1.13.oder 2.15 aus sow wie die select zum laden auch definiert ist

das Resultset beim laden der combobox liefert für alle drei Spalten auch die richtigen Werte in der Konsole
 
Es ist trotzdem der falsche Weg einfach Object als Type für die Parameter festzulegen. Verwende doch den konkreten Typ den du erwartest (also zum Beispiel: int, String, double, Date, ...).
Schau dir bitte die PreparedStatements nochmal an. Du stückelst dein SQL Statement noch immer zusammen -> Gefahr von SQL Injection!

Dort wo du die speichern Methode aufrufst solltest du kontrollieren ob du auch wirklich das richtige (gewünschte) KursElement Objekt selektiert hast und auch von der Methode getSelectedItem zurück bekommst.
 
habe noch einen Ansatz gefunden, in der Klasse KursElement sieht es so aus:
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;
   }

}

hier habe ich eine andere Reihenfolge im Konstruktor und
public String toString() {

return kurs_id;
}

ich werde hier mal schauen...
 
1. Du hast den Sinn von PreparedStatements nicht verstanden.
2. Das was du als "Struktur der db" gepostet hast, ist nicht wirklich hilfreich. Wenn du beim insert in die Tabelle "fragen" unerwartetes Verhalten bekommst, wäre es natürlich hilfreich, deren Struktur zu posten anstatt die Struktur der "kurse" Tabelle. Dann könnte man schauen, on in die "kurs" Spalte der "fragen" Tabelle wirklich die kursnr oder vielleicht doch die kurse_id (den Plural bei kurse_id finde ich auch verwirrend) gehört.
Aber jetzt bin ich raus.
 
Was du uns mit deinem letzten Beitrag sagen möchtest, erschliesst sich mir nicht.

Wenn man sich vorherige Beiträge nochmals anschaut fällt auf das er im SELECT Statement folgendes stehen hat "SELECT kursnr, kurse_id ....".
Beim Erstellen der KursElement Objekte übergibt er die Daten in der falschen Reihenfolge. Die Kursnr übergibt er als kurse_id und die kurse_id als kursnr.
 
hab das mal gedreht:
Java:
public class KursElement {
   
   private String kurs_id;
   private String kursnr;
   private String bezeichnung;
   
   public KursElement(String kursnr, String kurs_id, String bezeichnung) {
       
       this.kurs_id = kursnr;
       this.kursnr = kurs_id;
       this.bezeichnung = bezeichnung;
       
   }
   
   public String toString() {
       
       return kurs_id;
   }
   
   public String getKurs_Id() {
       
       return kurs_id;
   }
   
   public String getKursnr() {
       
       return kursnr;
   }
   
   public String getBezeichnung() {
       
       return bezeichnung;
   }

}

er speichert trotzdem nicht die richtige Nummer
 
Bitte verwende den Debugger! Kontrolliere welche KursElement Objekte erstellt werden (sind diese korrekt?)
Kontrolliere mit Hilfe des Debuggers ob wirklich das selektierte Element zurückgegeben wird und ob es die richtigen Daten enthält!

Ich hoffe dein "Bugfix" indem du die Parameterbezeichner im Konstruktor von KursElement vertauscht ist nicht ernst gemeint und war nur zum testen. Wenn du schon einen Fehler bemerkst dann behebe ihn auch richtig 😉
*) Passe entweder dein SELECT Statement an
*) Lies die Strings in der richtigen Reihenfolge von ResultSet aus
*) Passe den Konstruktor so an das die Bezeichner passen (es ist unlogisch das der Parameter "kursnr" dem Attribut "kurse_id" zugewiesen wird)
 
jetzt habe ich aber in der Combobox das Problem dass er nicht mehr kursnr sonder kurs_id anzeigt, die Reihenfolge beim Aufruf ist aber:
Java:
mysql.boxKursLaden(boxKursM, "select kursnr, kurse_id, bezeichnung from kurse ORDER BY kursnr");
 
es funktioniert jetzt mit kursnr

vielen Dank nochmal, auch für eure Kritik

ich weiß doch das ich noch ne Menge Hausaufgaben machen muss und vor allem funktionierenden Code auch verstehen muss, ich werde jetzt erstmal eure "Meckerliste" aus diesem Beitrag abarbeiten und meinen Code bereinigen, gelernt habe ich gestern auf jeden Fall ne Menge
 

Neue Themen


Zurück
Oben