Zum Inhalt springen

letzter Datensatz wird nicht gelesen


hawkeye78

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...