letzter Datensatz wird nicht gefunden?

Status
Nicht offen für weitere Antworten.

hawkeye78

Bekanntes Mitglied
Hallo,

ich habe ein kleines Problem, mit einem Zugriff auf eine Access-Datenbank. Das hineinschreiben des Datensatzes in die Datenkbank funktioniert ohne Probleme. Wenn ich aber direkt darauf in einer zweiten Methode ein SELECT auf die gleiche Datenbanktabelle ausführe, befindet sich der zuletzt eingefügte Datensatz nicht im ResultSet. Ich habe nun zur Probe noch ein showMessageDialog eingebaut, sobald ich das wegklicke funktioniert es ohne Probleme. Meine Frage ist nun kann es sein das Java bzw. JDBC bzw. Access eine Verzögerung in dem schreiben der Daten und dem anschließenden auslesen hat?
Ich hoffe ich konnte eingermaßen verständlich erklären, wo genau mein Problem liegt und ich möchte schon einmal für die kommende Hilfe bedanken. :) .
Gruß
Dan
 

nollario

Bekanntes Mitglied
erklärung war zwar gut, aber ich kann das so irgendwie nicht glauben! ;-)

vielleicht etwas code dazu?

sobald das statement ausgeführt wird, ist das statement auch in der db ausgeführt (die abarbeitung findet synchron statt!).
 

hawkeye78

Bekanntes Mitglied
Hallo,

ich würde auch eher auf einen anderen Fehler tippen, aber aus irgendwelchen mir nicht verständlichen Gründen funktioniert es dann...Was den Quellcode betrifft habe ich das problem schon einmal gepostet weil ich erst auf ein Problem mit der aktualisierung von Tabellen getippt habe. http://www.java-forum.org/de/viewtopic.php?t=5791
Allerdings fehlt in dieser Aufführung noch der Abschnitt in welchem ich die beiden Methoden (neu, zum Anlegen des Datensatzes in der DB und Tabellefuellen zum aktualisieren der Tabelle) aufrufe. Das geschieht mit folgenden Quellcode:

Code:
import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException;
import java.util.Vector;

import javax.swing.*;

public class Oberflaeche
extends JFrame
implements WindowListener
{
//[...]
	// Funktionsbelegung für den Erfassen-Button
		BerfassenEintrag.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				db1.neu(Oberflaeche.this);

				// Aufruf der Methode zum Füllen der Tabelle
				tab1.Tabellefuellen(Oberflaeche.this, iIDFahrzeug);
				
				// Leeren der Eingabefelder
				Oberflaeche.this.TFDatum.setText("");
				Oberflaeche.this.TFeuro.setText("");
				Oberflaeche.this.TFkm.setText("");
				Oberflaeche.this.TFliter.setText("");
			}
		});
//[...]		
}


Ich bin schon seit einiger Zeit ziemlich ratlos warum das nicht funktioniert, und bin zum einen für dein Posting und zum anderen für einen Hilfreichen Rat sehr dankbar.
Gruß
Dan :bahnhof: [/url]
 
O

Oliver001

Gast
Ob es am "Graphic-handling liegt" oder an der DB-Abfrage, lässt sich ja einfach bestimmen, indem man das Resultset einfach mal an der Konsole ausgibt - ohne irgendwelche Graphic oder was auch immer.

Ich erinnere mich, dass ich auch mal ein solches Problem hatte - mag mich allerdings nicht mehr erinnern, wie ich's gelöst hatte. :-(
In dunkler Erinnerung habe ich einen ziemlichen Designwechsel vollzogen - am Schluss war's ein MVC.

Sorry,
Oli
 
G

Guest

Gast
Hallo Oliver,

ich habe bei dem auslesen des Resultsets jeweils ein Feld ausgeben zu lassen, um mal zu überprüfen ob der aktuell hinzugefügte Datensatz dabei ist, leider nicht :(

Ich kann mir irgendwie nicht vorstellen das es wirklich mit dem Design zusammen hängt, aber ich kann auch mal wieder Meilenweit daneben liegt, und ich wirklich das gesamte Design umstricken muss.
 

Jaraz

Bekanntes Mitglied
Hi,

wenn ich das richtig sehe fügst du dasselbe Array mehrfach hinzu. Das kann zu komischen Effekte führen.
Erzeuge mal zwischendurch ein neues Array.

Gruß Jaraz
 

hawkeye78

Bekanntes Mitglied
ich habe jetzt die deklaration des arrays mit in die schleife genommen, aber das zeigt auch keine Änderung. Wenn ich es nicht besser wüßte würde ich wirklich sagen das der JDBC-Treiber und mein Programm nicht synchron laufen. Da der erste Datensatz den ich erfasse nicht in der Tabelle angezeigt wird. wenn ich allerdings direkt danach noch einen Satz erfasse wird der zu erst erfasse Satz angezeigt. Allerdings habe ich auch noch die Vermutung das ich irgendwo einen grossen Designfehler in meinem Programm habe darum möchte ich einmal ganz gerne den Quellcode für meine Oberfläche posten:

Code:
import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException;
import java.util.Vector;

import javax.swing.*;

public class Oberflaeche
extends JFrame
implements WindowListener
{
	// Definition der Labels
	private JLabel LFahrzeug=new JLabel("  Fahrzeug");
	private JLabel LDatum=new JLabel("  Datum");
	private JLabel LBeleg=new JLabel("  Beleg");
	private JLabel Lkm=new JLabel("  km");
	private JLabel Lliter=new JLabel("  l");
	private JLabel Leuro=new JLabel("  €");
	public JLabel LMeldung=new JLabel(" ");
		
	// Definition der Textfelder
	public JTextField TFDatum=new JTextField(10);
	public JTextField TFkm=new JTextField(10);
	public JTextField TFliter=new JTextField(10);
	public JTextField TFeuro=new JTextField(10);
	
	// Definition der Dropdownlisten
	public JComboBox DDBeleg =new JComboBox();
	public JComboBox DDFahrzeug =new JComboBox();
	
	// Definition der Checkbox
	private JCheckBox CBvollgetankt =new JCheckBox("nicht vollgetankt?",false);
	
	// Definition der Buttons
	private JButton BerfassenEintrag=new JButton("Erfassen");
	private JButton BverwaltenAuto=new JButton("Fahrzeug verwalten");
	private JButton BdeleteEintrag=new JButton("Eintrag löschen");
	private JButton BeditEintrag=new JButton("Eintrag bearbeiten");
	private JButton BEnde=new JButton("Ende");
	private JButton BverwaltungBelege=new JButton("Belege verwalten");
		
	// Definition der Reiter
	JTabbedPane TPReiter = new JTabbedPane();
	
	// Definition der Tabelle
	JTable TABverbrauch = new JTable();
	
	// Definition der Panels für die einzelnen Reiter
	JPanel PListe = new JPanel();
	JPanel PGrafik= new JPanel();
	JPanel PKosten=new JPanel();
	
	boolean bolvollgetankt=false;            // Schalter ob das Fahrzeug vollgetankt wurde
	
	public Datenbank db1;

	public Vector vFahrzeug=new Vector();    // Vektor für die Fahrzeuge
	
	Tabelle tab1;
	
	int iIDFahrzeug;                         // ID des ausgewählten Fahrzeuges
	
	public Oberflaeche()
	{
		super("Benzinverwaltung");
		
		try
		{		
			db1=new Datenbank(this);
			tab1=new Tabelle(this);
		}
		catch(SQLException excep)
		{
			this.LMeldung.setText(excep.toString());
		}
		
		addWindowListener(this);
		
		// Definition der Panels
		JPanel linksoben=new JPanel();
		JPanel linksunten=new JPanel();
		JPanel linksgesamt=new JPanel();
		JPanel rechtsgesamt=new JPanel();
		JPanel rechtsunten=new JPanel();
		JPanel gesamt=new JPanel();
		
		// Definition Layouts für die Panels
		linksoben.setLayout(new GridLayout(6,2));
		linksunten.setLayout(new GridLayout(7,1));
		linksgesamt.setLayout(new GridLayout(2,1));
		
		// Zusammenfügen der Elemente für den Panel linksoben
		linksoben.add(DDFahrzeug);    // Dropdownliste für das Fahrzeug
		linksoben.add(LFahrzeug);     // Label für das Fahrzeug
		linksoben.add(TFDatum);       // Textfeld für das Datum
		linksoben.add(LDatum);        // Label für das Datum
		linksoben.add(DDBeleg);       // Dropdownliste für die Belegart
		linksoben.add(LBeleg);        // Label für den Beleg
		linksoben.add(TFkm);          // Textfeld für die Strecke
		linksoben.add(Lkm);           // Label für die Strecke
		linksoben.add(TFliter);       // Textfeld für die Kraftstoffmenge
		linksoben.add(Lliter);        // Label für die Kraftstoffmenge
		linksoben.add(TFeuro);        // Textfeld für den Betrag
		linksoben.add(Leuro);         // Label für den Betrag
		
		// Zusammenfügen der Elemente für den Panel linksunten
		linksunten.add(CBvollgetankt);		
		linksunten.add(BverwaltenAuto);
		linksunten.add(BverwaltungBelege);
		linksunten.add(BerfassenEintrag);
		linksunten.add(BeditEintrag);
		linksunten.add(BdeleteEintrag);
		linksunten.add(BEnde);
		
		// Festlegen der Tooltips für die Buttons
		BverwaltenAuto.setToolTipText("verwalten der Fahrzeuge");
		BverwaltungBelege.setToolTipText("Verwalten der Belegarten");
		BerfassenEintrag.setToolTipText("erfassen eines neuen Datensatzes");
		BeditEintrag.setToolTipText("Ändern eines Eintrages in der Datenbank");
		BdeleteEintrag.setToolTipText("Löscht einen Eintrag aus der Datenbank");
		BEnde.setToolTipText("Programm verlassen");
		
		// Zusammenfügen des linken Fensterelements
		linksgesamt.add(linksoben);
		linksgesamt.add(linksunten);

		Container contentPane=getContentPane();
		
		contentPane.setLayout(new BorderLayout());
		contentPane.add(linksgesamt,"West");
		contentPane.add(TPReiter, "Center");
		contentPane.add(LMeldung,"South");
		
		// Erzeugen der einzelnen Reiter
		TPReiter.add(PListe, "Liste");
		TPReiter.add(PGrafik, "Grafik");
		TPReiter.add(PKosten, "Kosten");

		JScrollPane sp=new JScrollPane(TABverbrauch);
		sp.setPreferredSize(new Dimension(470,260));
		PListe.add(sp);

		// Actionlistener für die Auswahl des Fahrzeuges
	    DDFahrzeug.addItemListener( new ItemListener()
	    {
	    	public void itemStateChanged( ItemEvent e )
	    	{
	    		if(e.getStateChange()==ItemEvent.SELECTED)
	    		{
	    			// Ermittelung der Fahrzeug ID aus der Dropdownauswahl
	    			int iauswahl=DDFahrzeug.getSelectedIndex();
	    			String sIDFahrzeug=vFahrzeug.elementAt(iauswahl).toString();	
	    			iIDFahrzeug= Integer.parseInt(sIDFahrzeug);
	    			
	    			// Aufruf der Methode zum Füllen der Tabellenfelder
	    			tab1.Tabellefuellen(Oberflaeche.this, iIDFahrzeug);
	    		}
	    	}
	    });
		
		// Listener für die Checkbox
		ItemListener listvollgetankt=new ItemListener(){
			public void itemStateChanged(ItemEvent e)
			{
				if(CBvollgetankt.isSelected()==true)
				{
					bolvollgetankt=true;
				}
				else
				{
					bolvollgetankt=false;
				}
			}
		};
		
		// Festlegen des Listeners auf die Checkbox
		CBvollgetankt.addItemListener(listvollgetankt);
		
		// Belegen des Verlassen Buttons
		BEnde.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				db1.schliessen();
				dispose();
				System.exit(0);
			}
		});
		
		// Funktionsbelegung für den Erfassen-Button
		BerfassenEintrag.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
// Einfügen des Datensatz in die Datenbank				
db1.neu(Oberflaeche.this);

				// Aufruf der Methode zum Füllen der Tabelle
				tab1.Tabellefuellen(Oberflaeche.this, iIDFahrzeug);
				
				// Leeren der Eingabefelder
				Oberflaeche.this.TFDatum.setText("");
				Oberflaeche.this.TFeuro.setText("");
				Oberflaeche.this.TFkm.setText("");
				Oberflaeche.this.TFliter.setText("");
			}
		});
		
		// Funktionsbelegung für den Fahrzeugverwalten-Button
		BverwaltenAuto.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				VerwaltenAuto v1;
				
				v1=new VerwaltenAuto(Oberflaeche.this, "Verwalten der Fahrzeuge", true);
				
				v1.setSize(350,200);
				v1.show();
			}
		});
		
		// Funktionsbelegung für den Button zum Verwalten der Belege
		BverwaltungBelege.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				VerwaltenBelege v2;
				
				v2=new VerwaltenBelege(Oberflaeche.this, "Verwalten der Belege", true);
				
				v2.setSize(350,270);
				v2.show();	
			}
		});			
	}
	
	public JTable getTable()
	{ 
	    return TABverbrauch; 
	} 
	
	public void windowOpened(WindowEvent e) {}
	
	// Schliessen des Fensters
	public void windowClosing(WindowEvent e)
	{
		// Schliessen der Datenbankverbindung zum Füllen der Dropdownlisten
		db1.schliessen();
  
		// Schliessen der Datenbankverbindung zum Auslesen der Datenstätze
		tab1.schliessen();
		dispose();
	}

	// Verlassen des Programms wenn das Fenster geschlossen ist
	public void windowClosed(WindowEvent e)
	{
		System.exit(0);
	}

	public void windowIconified(WindowEvent e) {}
	public void windowDeiconified(WindowEvent e) {}
	public void windowActivated(WindowEvent e)
	{
		// Entfernen aller Elemente aus den beiden Dropdownlisten
		Oberflaeche.this.DDBeleg.removeAllItems();
		Oberflaeche.this.DDFahrzeug.removeAllItems();
		
		// Methode zum füllen der beiden Dropdownlisten
		db1.fuellenfelder(Oberflaeche.this);
	}
	public void windowDeactivated(WindowEvent e) {}
}

Vielleicht könnte ja jemand mal über den Quellcode schauen ich bin auf jeden fall ziemlich ratlos warum das nicht funktioniert :(
Noch einmal vielen Dank für diese grossartige Hilfe die mir bis jetzt zu teil geworden ist.
Gruß
Dan
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Letzter Datensatz mit auslesen(brauch kleinen Tipp) Datenbankprogrammierung 15
L JTable-DB: Letzter wert wird nicht angezeigt. Datenbankprogrammierung 0
F SQLite Datensatz löschen Datenbankprogrammierung 13
B Mit Button einen Datensatz löschen Datenbankprogrammierung 2
S sql query, um bestimten datensatz zu finden Datenbankprogrammierung 33
D MySQL Neuen Datensatz mit "new" anlegen Datenbankprogrammierung 16
E Nur der letzte Datensatz wird in Tabelle geschrieben Datenbankprogrammierung 4
M Serienbrief aus Datensatz Datenbankprogrammierung 2
E Aufzählung liest nur ersten Datensatz Datenbankprogrammierung 14
S SQLite Selectanfrage lieft datensatz aber cursor ist leer Datenbankprogrammierung 2
M Designfrage zu Rows die sich auf einen Datensatz derselben Tabelle beziehen Datenbankprogrammierung 7
A MySQL Datensatz wird nicht richtig gelöscht Datenbankprogrammierung 6
L SQLite fügt nur den ersten Datensatz ein Datenbankprogrammierung 2
C Hibernate Datensatz löschen Datenbankprogrammierung 2
M Access Datensatz beinhaltet ESC-Zeichen Datenbankprogrammierung 3
U Nur den ersten Datensatz löschen wenn mehrere gleiche da sind Datenbankprogrammierung 2
C Gleichzeitiger Zugriff auf Datensatz Datenbankprogrammierung 5
Eldorado MySQL Hibernate - neuen Datensatz einfügen Datenbankprogrammierung 2
Java.getSkill() Datensatz / Tupel automatisch nach xy Tagen / Stunden löschen Datenbankprogrammierung 7
M Datensatz exklusiv öffnen Datenbankprogrammierung 5
M design issue: datensatz lange locken? Datenbankprogrammierung 10
M Datensatz aus Datenbank löschen Datenbankprogrammierung 6
T Theoriefrage : mehrere User vs gleichen Datensatz Datenbankprogrammierung 4
K Schnelle Methode um zu testen ob Datensatz existiert Datenbankprogrammierung 9
R datenbank - datensatz sucjen Datenbankprogrammierung 4
-MacNuke- Hibernate löscht jeden Datensatz einzeln? Datenbankprogrammierung 12
V Doppelten Datensatz vermeiden? Datenbankprogrammierung 7
S Überprüfen ob Datensatz existiert Datenbankprogrammierung 2
P SQL, nur jeder 5. Datensatz Datenbankprogrammierung 9
B Eingefügter Datensatz erneut abfragen. Datenbankprogrammierung 10
J Anzeige Button gibt immer nur 1. Datensatz aus DB aus Datenbankprogrammierung 8
N SELECT: Datensatz sperren Datenbankprogrammierung 6
C vorheriegen oder letzten Datensatz Datenbankprogrammierung 2
K ResultSet: Erste Zeile ausgeben, Datensatz in String speiche Datenbankprogrammierung 13
W Nur ein Datensatz wird angezeigt, obwohl mehrere existieren Datenbankprogrammierung 7
C Datensatz einfügen und quittierung Datenbankprogrammierung 31
F suche MySQl-Befehl um Datensatz an Tabellenende zu schreiben Datenbankprogrammierung 2
D JOIN COLUMN wird nicht genommen Datenbankprogrammierung 2
Maxim6394 JPA / EclipseLink - n:m Beziehung wird nicht aktualisiert Datenbankprogrammierung 0
Maxim6394 JPA 3.2 & SQLite - LocalDateTime wird falsch geladen Datenbankprogrammierung 1
D Ich möchte dass ich nachdem man den Kommentar geschrieben hat den Kommentar in den Tabelle Bestellübersicht geschbeichert wird klappt nicht bei mir Datenbankprogrammierung 2
Watsoon Treiber wird in Intellij nicht geladen Datenbankprogrammierung 2
Kirby.exe PreparedStatement wird nicht ausgeführt Datenbankprogrammierung 5
Z Datenbank Choicebox wird nicht befüllt Datenbankprogrammierung 15
N Sqlite DB mit Java wird auf Linuxsystem nicht gefunden Datenbankprogrammierung 9
J Netbeans 11 und Eclipse JPA 2.5 Entity wird nicht gefunden Datenbankprogrammierung 4
F H2 ObjectOptimisticLockingFailureException wird nicht geworfen Datenbankprogrammierung 0
S sun.jdbc.odbc.JdbcOdbcDriver wird nicht gefunden Datenbankprogrammierung 2
S MySQL Speicher wird nicht freigegeben bei Datenbankabfragen Datenbankprogrammierung 6
D MySQL Eingabe wird nicht übernommen... Datenbankprogrammierung 11
L Select Anweisung wird falsch interpretiert Datenbankprogrammierung 3
F sun.jdbc.odbc.jdbcodbcdriver wird nicht gefuden Datenbankprogrammierung 3
K Datenbank wird bei Programmstart als .jar nicht mehr befüllt Datenbankprogrammierung 12
T MySQL Datetime wird auf Sekunden gerundet, soll es aber nicht Datenbankprogrammierung 2
N SQL-Statement Auslesen des Resultset wird immer langsamer Datenbankprogrammierung 6
P JSF + H2 + TomEE + Hibernate/JPA Datenbank wird nicht angelegt Datenbankprogrammierung 3
C Programm wird nach DB-Eintrag nicht weitergeführt Datenbankprogrammierung 5
M OutOfMemoryException obwohl nur 1 Eintrag abgefragt wird Datenbankprogrammierung 7
T f:event preRenderView Trigger wird nicht ausgeführt Datenbankprogrammierung 4
P Oracle Hibernate - Oracle-VarChar-Index wird nicht genutzt Datenbankprogrammierung 3
H Microsoft Access Treiber wird nicht gefunden Datenbankprogrammierung 9
S JPA, Primary Key wird nicht in relationstabelle erstellt Datenbankprogrammierung 3
B MySQL Hibernate (duplicate Entry) Beziehungstabelle wird nicht befüllt Datenbankprogrammierung 8
N batchupdate, es wird nur der letzte Eintrag eingetragen Datenbankprogrammierung 5
N batch-Update wird nicht durchgeführt Datenbankprogrammierung 2
M Rückgabewert aus DB wird falsch gelesen Datenbankprogrammierung 3
S Wie überprüfe ich ob die Instanz einer Connection gerade werwendet wird? Datenbankprogrammierung 4
C DB.Treiber wird nicht gefunden? Datenbankprogrammierung 5
E MySQL Treiber wird nicht geladen Datenbankprogrammierung 5
K org.gjt.mm.mysql.driver wird nicht gefunden Datenbankprogrammierung 11
T Unerwartete Datenbankausgabe bei "select now()" (es wird ein .0 angehängt) Datenbankprogrammierung 5
N Ubuntu 9.04 jdbc connector wird nicht gefunden Datenbankprogrammierung 5
K Wird auf den Eintrag referenziert? Datenbankprogrammierung 4
J SqlConnection Instanz wird immer grösser? Datenbankprogrammierung 2
I Sql Befehl wird nicht ausgeführt Datenbankprogrammierung 8
sparrow [Hibernate] Relation wird nicht gespeichert (Topic changed) Datenbankprogrammierung 11
A REVOKE wird nicht durchgeführt Datenbankprogrammierung 2
M Treiber wird nicht gefunden Datenbankprogrammierung 5
P Datenbank wird nicht geschlossen - problematisch? Datenbankprogrammierung 2
N mysql.jdbc treiber wird nicht gefunden Datenbankprogrammierung 2
D Neuer Query wird nicht erkannt Datenbankprogrammierung 10
S JOptionPane wird nicht angezeigt Datenbankprogrammierung 5
ven000m SQL Querry wird nicht abgesetzt, da vorher underlined! Datenbankprogrammierung 8
D "Distinct" wird nicht ausgeführt Datenbankprogrammierung 8
H mySql Connector/J Treiber wird nicht gefunden Datenbankprogrammierung 2
C SQLException wenn String auf VARCHAR geschrieben wird Datenbankprogrammierung 10
H JDBC-Treiber wird nicht geladen Datenbankprogrammierung 2
L SQL-Problem: Insert wird nicht ausgeführt Datenbankprogrammierung 5
N Cloudscape wird opensource :) Datenbankprogrammierung 3
X Verbindung zu DB wird zurückgewiesen Datenbankprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben