Hab da ein kleines Verständnisproblem:
Ich arbeite gerade an einer kleinen Datenbankanwendung mit einer GUI. Es handelt sich dabei um eine Objekt-Datenbank (db4o). Dafür wollte ich mir einen DAL schreiben, den ich auch in zukünftigen Projekten nutzen kann, d.h., er sollte möglichst abstrakt sein.
In diesem DAL habe ich entsprechende Methoden, mit denen ich die Datenbank öffne/erstelle und schließe. Es sollen noch Methoden folgen, mit denen ich Objekte in die Datenbank speichern kann, Methoden zum Löschen, Methoden zum Lesen eines Objekts aus der Datenbank usw.
Nun habe ich das Problem bei diesen Methoden, genauer gesagt bei den Parametern und den return statements.
Für jede "Tabelle" habe ich eine Klasse mit gettern und settern. Davon wird ein Objekt generiert, gefüllt und als Objekt in die Datenbank gespeichert. Das Objekt muss ich als Parameter an die Speicher-Methode übergeben. Der Objekttyp ist aber variabel, abhängig von der Klasse aus der es generiert wurde. Wie kann ich ein Parameter/Objekt mit variablen Objekttyp übergeben?
Gleiches Problem habe ich dann natürlich auch bei den return statements bei der Methode, die ein gelesenes Objekt zurückgeben soll.
Beispiel:
Zu Speichernde/lesende Klasse/Objekt:
DAL-Klasse (Problem bei Insert/Update/getObject):
Vor allem bei den Methoden zum Speichern kann ich das Objekt nicht als Objekttyp Object speichern oder casten, es muss schon als das Ursprungsobjekt vorliegen.
Ich hoffe, ich hab mich einigermaßen verständlich ausgedrückt, mir fehlt noch Vokabular.
Ich arbeite gerade an einer kleinen Datenbankanwendung mit einer GUI. Es handelt sich dabei um eine Objekt-Datenbank (db4o). Dafür wollte ich mir einen DAL schreiben, den ich auch in zukünftigen Projekten nutzen kann, d.h., er sollte möglichst abstrakt sein.
In diesem DAL habe ich entsprechende Methoden, mit denen ich die Datenbank öffne/erstelle und schließe. Es sollen noch Methoden folgen, mit denen ich Objekte in die Datenbank speichern kann, Methoden zum Löschen, Methoden zum Lesen eines Objekts aus der Datenbank usw.
Nun habe ich das Problem bei diesen Methoden, genauer gesagt bei den Parametern und den return statements.
Für jede "Tabelle" habe ich eine Klasse mit gettern und settern. Davon wird ein Objekt generiert, gefüllt und als Objekt in die Datenbank gespeichert. Das Objekt muss ich als Parameter an die Speicher-Methode übergeben. Der Objekttyp ist aber variabel, abhängig von der Klasse aus der es generiert wurde. Wie kann ich ein Parameter/Objekt mit variablen Objekttyp übergeben?
Gleiches Problem habe ich dann natürlich auch bei den return statements bei der Methode, die ein gelesenes Objekt zurückgeben soll.
Beispiel:
Zu Speichernde/lesende Klasse/Objekt:
Code:
public class Person {
private String name;
private byte alter;
//Konstruktor
public Person(String name, byte alter){
this.name = name;
this.alter = alter;
}
//Konstruktor
public Person(){
this.name = null;
this.alter = 0;
}
//Getter
public String getName(){
return this.name;
}
public byte getAlter(){
return this.alter;
}
//Setter
public void setName(String name){
this.name = name;
}
public void setAlter(byte alter){
this.alter = alter;
}
}
DAL-Klasse (Problem bei Insert/Update/getObject):
Code:
public class Db4o_dal {
ObjectContainer object_container;
String db_name = new String();
//Kostruktoren
public Db4o_dal(String db_name){
this.db_name = db_name;
}
public Db4o_dal(){
}
//Connect or Create Databasefile
public void ConnectToDB(String db_name){
if(this.db_name.isEmpty()) this.db_name = db_name;
if(this.db_name.isEmpty()) return;
try{
ObjectContainer oc=Db4o.openFile(this.db_name.toString());
this.object_container = oc;
} catch (Db4oIOException e){
JOptionPane.showMessageDialog(null, e.getMessage(), "Fehler", JOptionPane.OK_CANCEL_OPTION);
}
}
//Close Database
public void CloseDB(){
if(this.object_container != null){
try{
this.object_container.close();
} catch(Exception e){
JOptionPane.showMessageDialog(null, e.getMessage(), "Fehler", JOptionPane.OK_CANCEL_OPTION);
}
}
}
//Insert Object
public void InsertObject(Object object){
try{
object_container.set((object.getClass().cast(object)));
} catch(Exception e){
JOptionPane.showMessageDialog(null, e.getMessage(), "Fehler", JOptionPane.OK_CANCEL_OPTION);
}
}
//Update Object
public void UpdateObject(Class<?> object){
try{
object_container.set(object);
} catch(Exception e){
JOptionPane.showMessageDialog(null, e.getMessage(), "Fehler", JOptionPane.OK_CANCEL_OPTION);
}
}
//Read object
public Class<?> getObject(){
return object;
}
}
Vor allem bei den Methoden zum Speichern kann ich das Objekt nicht als Objekttyp Object speichern oder casten, es muss schon als das Ursprungsobjekt vorliegen.
Ich hoffe, ich hab mich einigermaßen verständlich ausgedrückt, mir fehlt noch Vokabular.