Datenbankanbindung, indirekte Variablen, Variablen zusammensetzen

enheoh

Grünschnabel
Hallo zusammen,

um die Daten einer Datenbank zu modifizieren schreibe ich gerade ein Javaprogramm. Die Daten sollen nach dem lesen zwischengespeichert werden. Deshalb habe ich erst einmal Instanz einer Klasse mit den Daten angelegt. Um zu schauen, ob sich diese verändert haben (durch einen anderen Nutzer), sollen diese mit den aktuellen Daten, die vor dem Schreiben in eine zweite Instanz der Klasse gelesen habe, verglichen werden. Da sich die Anzahl der Felder ändern können wollte ich beim Vergleich der Daten über
Code:
private void compareData(ProjectDataSet originalDataSet, ProjectDataSet acutalDataSet)		
		Field fields[] = originalDataSet.getClass().getFields();

die Namen der Felder, die alle verglichen werden sollen, auslesen. Dann sollen die Felder über indirekte Variablen angesprochen werden. Ich stelle mir den Code ungefähr so vor:
Code:
boolean different[] = new boolean [fields.length];

for (int i = 0; i < fields.length; i++) {
   if (originalDataSet.field[i].****? != actualDataSet.field[i]).****? {
      different[i] = true;
   } else {
      different[i] = false;
   }
}
Am schönsten wäre, wenn die Namen der Variablen in einem Array gespeichert werden könnte, und damit könnten die Werte in einer Schleife bearbeitet werden. Dann könnte ich auch andere Funktionen variabler gestalten.

Ist so etwas in Java möglich?

Vorab schon einmal danke für Euer bemühen und bis demnächst

André
 
Zuletzt bearbeitet:
Hallo zusammen,

falls so etwas nicht möglich ist, gibt es denn eine andere Möglichkeit Daten von zwei gleichen Instanzen einer Klasse zu vergleichen ohne das die Variablennamen benannt sind? Ansonsten muss ich die Variablen in dieser Funktion einzeln auflisten, dann kann ich diese Funktion aber nicht für ähnlich Vergleiche benutzen.

Manche Funktionen sind in Java doch recht kompliziert.

Bis dann

André
 
Ganz ehrlich, ich weiß immernoch nicht wo genau dein Problem liegt, wo du eventuell nicht weiterkommst oder was du genau willst...
Dann sollen die Felder über indirekte Variablen angesprochen werden.
Was verstehst du unter indirekte Variablen? Selbst mit Google finde ich keine sinnvolle Erklärung dafür was du meinst. Meinst du eventuell Getter- und Setter-Methoden?
Java:
class Fahrzeug
{
	//Variablen
	private String marke;
	private String name;

	//Konstruktor
	public Fahrzeug(String marke, String name)
	{
		this.marke = marke;
		this.name = name;
	}

	//Getter-Methoden
	public String getMarke()
	{
		return marke;
	}

	public String getName()
	{
		return name;
	}
	
	//Setter-Methoden
	public void setMarke(String marke)
	{
		this.marke = marke;
	}

	public void setName(String name)
	{
		this.name = name;
	}
}
Am schönsten wäre, wenn die Namen der Variablen in einem Array gespeichert werden könnte, und damit könnten die Werte in einer Schleife bearbeitet werden. Dann könnte ich auch andere Funktionen variabler gestalten.
Stichwort objektorientierte Programmierung. Scheue dich nicht weitere Klassen zu erstellen für Datenstrukturen. Vererbung könnte für dich auch eine sehr interessante Rolle spielen.
Java:
class Garage
{
	//Variablen
	private Fahrzeug[] fahrzeuge;
	private int anzahlFahrzeugeAktuell;

	//Konstruktor
	public Garage(int stellplaetze)
	{
		anzahlFahrzeugeAktuell = 0;
		fahrzeuge = new Fahrzeug[stellplaetze];
		for(int i=0; i<farhezuge.length(); i++)
		{
			fahrzeuge[i] = new Fahrzeug("n.a.", "n.a.");
		}
	}

	public boolean parkeAuto(String marke, String name)
	{
		if(anzahlFahrzeugeAktuell = farhezuge.length())
		{
			return false;
		}
		else
		{
			fahrzeuge[anzahlFahrzeugeAktuell].setMarke(marke);
			fahrzeuge[anzahlFahrzeugeAktuell].setName(name);
			anzahlFahrzeugeAktuell++;
			return true;
		}
	}
	
	public void findeAuto(/*...*/)
	{
		//...
	}

	public void fahreAuto(/*...*/)
	{
		//...
	}

	//...
}

Edit: Achja und wenn du etwas vergleichen möchtest, ist es z.B. bei Strings wichtig, dass du nicht '=' benutzt, sondern die equals-Methode!

Und deine if-Bedingung ist "umständlich", das kannst du in eine Zeile schreiben sinngemäß:
Java:
variablenName = ergebnisDesVergleiches; //eventuell auch mit Negation
 
Zuletzt bearbeitet:
Hallo HonniCilest,

danke erst einmal für Deine Ausführungen. Heute muss ich leider länger Arbeiten, so komme ich erst morgen dazu Deine Vorschläge zu erarbeiten und zu verstehen.

Mit indirekten Variablen meine ich, dass ich eine Variable z.B. mit .getClass().getFields() den Namen der Variable hole, die Instanz der Variable aber über eine andere Variable zuordne. Ich möchte mir sozusagen den Variablennamen, den ich Abfragen möchte, selber bilden.

Hier noch einmal ein zusammenhängender Code, der dies eventuell verdeutlicht.

Code:
private boolean[] compareData(ProjectDataSet originalDataSet, ProjectDataSet acutalDataSet) { 
   Field fields[] = originalDataSet.getClass().getFields(); //lädt die Namen der Felder
		
   boolean different[] = new boolean [fields.length];
		 
   for (int i = 0; i < fields.length; i++) {
      //                   Name des Datensatzes (wird der Funktion übergeben)
      //                                            Name des Feldes (gelesen über .getClass.getFields())
      different[i] = originalDataSet.fields[i].getContent.equals(actualDataSet.fields[i].getContent);
   }


   return different;

Ich hoffe das ich mich verständlicher ausgedrückt habe mit "indirekten Variablen" oder auch "indirekte Adressierung" von Variablen.

Bis dann,

André
 
Zurück