Rückwärts-Button

Prinz92

Mitglied
Hallo zusammen,

bin neu hier im Forum und ärgere mich schon die ganzen letzten Tage mit einem Problem herum, dass ich einfach nicht in den Griff bekomme.
Arbeite in der Schule zur Zeit im Team an einem Java-Projekt, in dem wir eine Haushaltsdatenbank erstellen möchten. Das ganze soll in etwa so funktionieren:

1. User gibt Daten zu einem zugehörigen Beleg ein (Beleg_nr., Verwendungszweck, Betrag, Datum... etc.)
2. Java speichert diese mittels SQL-Befehl in eine Access-Datenbank
3. In einem anderen Menü "Belegübersicht" ist es dem User möglich, mittels Vorwärts- und Rückwärts-Button zwischen den einzelnen, bereits gespeicherten Belegen hin- und her zu switchen.

Die Punkte eins bis zwei funktionieren einwandfrei... und bei dem dritten Punkte funktioniert die Vorwärts-Methode auch problemlos... hier mal der zugehörige Java-Quellcode für die Vowärts-Methode:

Java:
public boolean nächster()
			{
				try {
					 	
					if(rs.next())
					 		{				

					 			akt_Beleg.setBeleg_nr(rs.getInt("Beleg_Nr"));
					 			akt_Beleg.setKategorie(rs.getString("Kategorie"));
					 			akt_Beleg.setVerwendungszweck(rs.getString("Verwendungszweck"));
					 			akt_Beleg.setBetrag(rs.getDouble("Betrag"));
					 			akt_Beleg.setTag(rs.getInt("Tag"));
					 			akt_Beleg.setMonat(rs.getInt("Monat"));
					 			akt_Beleg.setJahr(rs.getInt("Jahr"));
					 			akt_Beleg.setKommentar(rs.getString("Kommentar"));
					 		
					 			return true;
					 		}
					 	else
					 		{						
					 			this.lies_rs();
					 			return false;
					 		}
				 	}
				 catch (SQLException err) 
				 	{
						System.out.println("Fehler in next");
						return false;
					}	
			}

Problematisch erscheint jetzt allerdings die Methode für den Rückwärts-Button... Hier gibt es von der Java-Bibliothek keine vorgegebene Methode, wie beim Vorwärts-Button "rs.next()"...

Bisher sieht meine Rückwärts-Methode so aus:

Java:
public boolean rückwärts() 
			{
					Beleg neu = null;
					Beleg alt = this.akt_Beleg;
					Beleg vorheriger;
			
					this.nächster();
			 	while(true)	 	
				 	{
				 		vorheriger = this.akt_Beleg;				 		
				 		if(neu != alt) 
				 		{
				 			this.nächster();
				 			neu = this.akt_Beleg;
				 		}
				 		return true;
				 	}
			
			}

.... aber wie ihr euch sicher denken könnt, funktioniert das nicht so wirklich.
Bin als Java-Einsteiger jedoch an meine Grenzen angelangt, und hoffe nun ein Experte hier könnte mir helfen ;-).

Freundliche Grüße und vielen Dank im voraus!
 
Danke für deine Antwort, wenn ich jedoch die rs.previous()-Methode verwende, wird mir eine Fehlermeldung angezeigt. In meinem Fall also: "Fehler in next"...
??
 
Wenn du die richtige Exception-Meldung posten würdest, könnte man sicherlich mehr sagen. Könnte sein dass die Methode nicht implementiert ist ?! Mhm, andere Möglichkeit wäre eben beispielsweise vorwärts normal durch zu laufen, alles in eine List stecken und diese dann rückwärts durchlaufen bzw, entsprechend iterieren. Kann man ja in kleineren Schritten machen, man muss sich ja nicht alle Ergebnisse sofort aus der DB holen...

[edit]
Du bekommst kein Stacktrace? Welch ein Wunder :bae:
[/edit]
 
Zuletzt bearbeitet:
Java:
	public boolean rückwärts() 
			{
			try {
				 	
				if(rs.previous())
				 		{				

				 			akt_Beleg.setBeleg_nr(rs.getInt("Beleg_Nr"));
				 			akt_Beleg.setKategorie(rs.getString("Kategorie"));
				 			akt_Beleg.setVerwendungszweck(rs.getString("Verwendungszweck"));
				 			akt_Beleg.setBetrag(rs.getDouble("Betrag"));
				 			akt_Beleg.setTag(rs.getInt("Tag"));
				 			akt_Beleg.setMonat(rs.getInt("Monat"));
				 			akt_Beleg.setJahr(rs.getInt("Jahr"));
				 			akt_Beleg.setKommentar(rs.getString("Kommentar"));
				 		
				 			return true;
				 		}
				 	else
				 		{						
				 			this.lies_rs();
				 			return false;
				 		}
			 	}
			 catch (SQLException err) 
			 	{
			
				 System.out.println("Fehler in previous");
				 return false;
				}	
		}

Es kommt keine Fehlermeldung, die Methode wird jedoch nicht umgesetzt, anstattdessen kommt die von mir eingefügte Meldung: "Fehler in previous"...
 
was ist an StackTrace nicht zu verstehen ?

Java:
err.printStackTrace();

da steht dann auch genau der fehler ...


wovon ich aber ausgehe : das statement wurde falsch initialisiert .. sprich : der parameter zur wahlfreien navigation wurde nicht übergeben wesshalb ResultSet.previous() nacht DOC richtigerweise eine Exception wirft
 
Ich würde auf kein Resultset im Speicher halten und für eine vor/zurück Funktion darin hin und herspringen. Wie eraaa sagte würde ich das ganze in eine Liste stecken und darin herumbrowsen. Manche ResultSets können nämlich nur in eine Richtung durchlaufen werden.
Ist eine Connection eigentlich blockiert solange man ein ResultSet offen hält? Ich google mal.
 
Sorry, aber bin noch absolut unvertraut mit dem Programm... in der Oberstufe geht es halt einfach nicht so schnell und tiefgründig voran wie an der Uni ;-)...


Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem:
Die Methode rückwärts() ist für den Typ DB_ZugriffBeleg nicht definiert (undefined)


Hoffe ihr könnt etwas damit anfangen.

Grüße

Nachtrag: Gäbe es nicht eine Möglichkeit, dass mit einer while-Schleife zu realisieren?
Das ich quasi sage, ich springe so lange einen Datensatz weiter, bis ich bei dem Datensatz VOR dem aktuellen Datensatz angekommen bin?

Bin wirklich ratlos, bitte daher nochmal um Hilfe...
 
Warum speicherst du dir dein Ergebnis nicht in irgend einer Datenstruktur und hüpfst dann über nen Index nach vorne/zurück?
 
Ich denke, dass Prinz einen Algorithmus sucht um ein gegenstück zu rs.next(); zu finden.

Möglichkeiten hierfür wäre z.B. der gebrauch einer Arraylist.

1. Du öffnest deine Datenbank in der Methode neu, so dass du dich am Anfang dieser befindest.
2. Du fügst mit Hilfe einer Whileschleife alle Datensätze an die Arraylist an, bis du bei deinem aktuellen angekommen bist (der von dem du zurück möchtest).
3. Du lässt dir die größe der liste geben.
4. Diese größe subtrahierst du mit 2 (Wichtig arraylist beginnt bei 0 mit dem Inhalt)
5. anschließend lässt du dir den datensatz mit der Indexzahl = größe - 2; ausgeben.

Probleme wird es geben, wenn du beim ersten Datensatz bist, deshalb ist an dieser Lösung noch etwas zu Feilen.

Andere möglichkeit wäre so lange vorwärts zu gehen, bis du bei dem datensatz vorher angekommen bist.

Sprich:

1. du weist deinem aktuellen Datensatz eine variable zu zB: "alt"
2. dann musst du noch eine variable an den aktuellen datensatz anfügen zB. "zurück" (für später wichtig)
3. du gehst einen Datensatz weiter mit rs.next();
4. du vergleichst den aktuellen Datensatz mit dem Datensatz alt. -> ( = bedingung für whileschleife)
5. Ist dieser ungleich, gehst du weiter im Datenblatt.
--> hier muss die whileschleife rein
6. du weist wieder zuerst deine variable "zurück" dem aktuellen Datensatz zu
7. du machst wieder rs.next();
8. du vergleichst wieder den aktuellen wert mit dem wert alt.
9. ist der gleich, weist du, dass deine Variable "zurück" dem wert vor deinem Anfangswert ist.


Hoffe ich konnte dir Helfen, evtl. haben die anderen noch eine Idee zum verfeinern meiner Vorschläge.

Lg

MJ
 

Neue Themen


Zurück
Oben