hawkeye78 Geschrieben 27. Juni 2004 Geschrieben 27. Juni 2004 Hallo, ich habe ein Problem mit einem Java Programm welches ich für unseren AE-Lehrer schreiben muß . Die Funktion welche bei mir momentan nicht funktioniert erstreckt sich bei mir über drei Klasse. In der ersten Klasse (Oberfläche), rufe ich zunächst die Methode neu aus der Klasse Datenbank aus, um dort einen Datensatz in die Access-Datenbank zu schreiben. Danach rufe ich in der Methode aus welcher ich auch die Methode neu aufgerufen habe, die Methode Tabellefüllen auf, über welche ich eigentlich die Daten in der Tabelle aktualisieren möchte. Aber genau das funktioniert momentan nicht. Als Quellcode stellt sich mein Programm momentan so da: public class Oberflaeche extends JFrame implements WindowListener { public Oberflaeche() { // Funktionsbelegung für den Erfassen-Button BerfassenEintrag.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { boolean erfolgreich=false; Oberflaeche.this.LMeldung.setText(" "); erfolgreich=db1.neu(Oberflaeche.this); // Aufruf der Methode zum Füllen der Tabelle tab1.Tabellefuellen(Oberflaeche.this, iIDFahrzeug); if(erfolgreich) { // Leeren der Eingabefelder Oberflaeche.this.TFDatum.setText(""); Oberflaeche.this.TFeuro.setText(""); Oberflaeche.this.TFkm.setText(""); Oberflaeche.this.TFliter.setText(""); } } }); } public class Datenbank { // Methode um einen neuen Datensatz zu erfassen public boolean neu(Oberflaeche o2) { boolean beinfuegen=false; beinfuegen=ueberpruefen(o2); if(beinfuegen) { boolean bolvollgetankt=o2.bolvollgetankt; // Ermittlung der Indizes aus den Dropdownlisten int iindex_fahrzeug=o2.DDFahrzeug.getSelectedIndex(); int iindex_beleg=o2.DDBeleg.getSelectedIndex(); // Ermittlung der ID's zu die Indizes String sfahrzeug_id=o2.vFahrzeug.elementAt(iindex_fahrzeug).toString(); String sbeleg_id=vBeleg.elementAt(iindex_beleg).toString(); // Konvertierung aller Daten in die Datenbankspezifischen Datentypen float fliter=Float.parseFloat(sliter); float fkm=Float.parseFloat(skm); float fbetrag=Float.parseFloat(sbetrag); float fverbrauch=0; if(belegart) { fverbrauch=fliter/fkm; } Integer iid_fahrzeug=Integer.valueOf(sfahrzeug_id); Integer iid_beleg=Integer.valueOf(sbeleg_id); String abfrage_einfuegen="INSERT INTO Verbrauch ( ID_Fahrzeug, ID_Beleg, Datum, Strecke, Kraftstoffmenge, Preis, vollgetankt, Verbrauch) VALUES ("+iid_fahrzeug+" ,"+iid_beleg+" ,"+sdatum+" ,"+fkm+" ,"+fliter+" ,"+fbetrag+" ,"+bolvollgetankt+" ,"+fverbrauch+")"; try { statement1.executeUpdate(abfrage_einfuegen); } catch(SQLException exec){} } return beinfuegen; } // Methode zur Überprüfung ob alle Felder gefüllt sind private boolean ueberpruefen(Oberflaeche o2) { ResultSet result_belegart; // Ermittlung der ID des Beleges int iindex_beleg=o2.DDBeleg.getSelectedIndex(); String sbeleg_id=vBeleg.elementAt(iindex_beleg).toString(); Integer iid_belegart=Integer.valueOf(sbeleg_id); // Füllen der Abfrage für die Belegart String sabfrage_belegart="SELECT DISTINCT Verbrauchsdaten FROM Belege WHERE ID_Beleg="+iid_belegart; try { result_belegart=statement1.executeQuery(sabfrage_belegart); result_belegart.next(); belegart=result_belegart.getBoolean("Verbrauchsdaten"); } catch(SQLException exec){} // Ermittlung der Daten aus den Textfeldern sdatum="'"+o2.TFDatum.getText()+"'"; sliter=o2.TFliter.getText(); skm=o2.TFkm.getText(); sbetrag=o2.TFeuro.getText(); // Überprüfung ob das Feld für das Datum gefüllt ist if(sdatum.equals("''")) { o2.LMeldung.setText("Das Feld für das Datum muß gefüllt sein"); return false; } // Überprüfung ob das Feld für den Betrag gefüllt ist if(sbetrag.equals("")) { o2.LMeldung.setText("Das Feld für den Betrag muß gefüllt sein"); return false; } // Überprüfung der Belegart und der Felder if(belegart) { // Überprüfung ob das Feld für den Verbrauch gefüllt ist if(sliter.equals("")) { o2.LMeldung.setText("Das Feld für den Verbrauch muß gefüllt sein"); return false; } // Überprüfung ob das Feld für den Kraftstoffverbrauch gefüllt ist if(sliter.equals("")) { o2.LMeldung.setText("Das Feld für den Verbrauch muß gefüllt sein"); return false; } // Überprüfung ob das Feld für die Strecke gefüllt ist if(skm.equals("")) { o2.LMeldung.setText("Das Feld für die Strecke muß gefüllt sein"); return false; } } else { sliter="0"; skm="0"; } return true; } // Methode zum schliessen der Verbindung zur Datenbank public void schliessen() { try { statement1.close(); } catch(SQLException ex) { int ergebnis=JOptionPane.showConfirmDialog(null, "Es ist ein Fehler beim schliessen der Datenbank aufgetreten","Fehler",JOptionPane.OK_OPTION); } } } import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.table.*; public class Tabelle extends DefaultTableCellRenderer { JTable TabVerbrauch; Statement statement1; // Objekt für den Handle auf die Datenbank Connection connection; // Objekt für die Verbindung zur Datenbank DefaultTableModel aModel; int iAnzahlDatensaetze=0; ResultSet result; // Methode (Konstruktur) zum Anlegen der Tabelle Tabelle(Oberflaeche o1) throws java.sql.SQLException { TabVerbrauch=o1.getTable(); aModel=(DefaultTableModel)TabVerbrauch.getModel(); // Definition der Spaltenüberschriften aModel.addColumn("Datum"); aModel.addColumn("Strecke"); aModel.addColumn("Kraftstoffmenge"); aModel.addColumn("Preis"); aModel.addColumn("Verbrauch"); aModel.addColumn("vollgetankt"); aModel.addColumn("Belegart"); // Laden des ODBC/JDBC Treibers try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(ClassNotFoundException e) {} // Aufbau der Verbindung zur Datenbank try { connection=DriverManager.getConnection("jdbc:odbc:Benzin","Admin",""); statement1=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); } catch(SQLException excep) { o1.LMeldung.setText(excep.toString()); } TabVerbrauch.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); } // Methode zum Füllen der Tabelle public void Tabellefuellen(Oberflaeche o1, int iIDFahrzeug) { TabVerbrauch=o1.getTable(); String sabfrage_verbrauch="SELECT Verbrauch.Datum, Verbrauch.Strecke, Verbrauch.Kraftstoffmenge, Verbrauch.Preis, Verbrauch.Verbrauch, Verbrauch.vollgetankt, Belege.Name FROM Verbrauch, Belege WHERE Belege.ID_Beleg=Verbrauch.ID_Beleg AND ID_Fahrzeug="+iIDFahrzeug; // Löschen der vorhandenen Zeilen aus der Tabelle for(int i=0; i<iAnzahlDatensaetze; i++) { aModel.removeRow(0); } iAnzahlDatensaetze=0; // Auslesen der Fahrzeuge aus der Tabelle Fahrzeuge try { result=statement1.executeQuery(sabfrage_verbrauch); // Auslesen des Ergebnissesfeldes aus der Datenbank while(result.next()) { Object[] Datensatz=new Object[7]; // Objekt für einen Datensatz; Datensatz[0]=result.getString("Datum"); double dStrecke=result.getDouble("Strecke"); Datensatz[1]=String.valueOf(dStrecke); double dKraftstoffmenge=result.getDouble("Kraftstoffmenge"); Datensatz[2]=String.valueOf(dKraftstoffmenge); double dPreis=result.getDouble("Preis"); Datensatz[3]=String.valueOf(dPreis); double dVerbrauch=result.getDouble("Verbrauch"); Datensatz[4]=String.valueOf(dVerbrauch); boolean bvollgetankt=result.getBoolean("vollgetankt"); System.out.println(Datensatz[0]); if(bvollgetankt) { Datensatz[5]="ja"; } else { Datensatz[5]="nein"; } Datensatz[6]=result.getString("Name"); // Hinzufügen der Zeile in die Tabelle aModel.addRow(Datensatz); iAnzahlDatensaetze=iAnzahlDatensaetze+1; } TabVerbrauch.setModel(aModel); } catch(SQLException ex){} } // Methode zum schließen der Verbindung zur Datenbank public void schliessen() { try { statement1.close(); connection.close(); } catch(SQLException e) {} } } Ich hoffe ich habe jetzt nicht zuviel Quellcode gepostet aber da ich momentan keine genaue Vorstellung habe wo der Fehler ist, möchte ich lieber ein wenig mehr posten. Ich wäre über einen entsprechenden Hinweise warum mein Programm nicht funktioniert sehr sehr dankbar, da ich an dem Problem schon eine ganze weile herum probiere. Gruß Dan Zitieren
hawkeye78 Geschrieben 29. Juni 2004 Autor Geschrieben 29. Juni 2004 hat sich erledigt, ich darf nicht mit zwei Statements / Connections gleichzeitig auf die Datenbank zu greifen Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.