| 

.NET C# Java Javascript Exception

1
Hallo zusammen,

da ich gerade kräftig am Java Lernen bin, habe ich mir ein Projekt mit einer kleinen Filmdatenbank für zuhause ausgedacht - nur als Lernübung. Das Datenbanklayout steht, jetzt geht es an die Programmierlogik.

Da ich die Sprache lernen will, möchte ich so wenig Frameworks wie möglich nutzen, also kein Hibernate, Spring etc.
Damit müsste ich nur meine Modelle bzw. Objekte programmieren und Hibernate würde den Rest machen.

Jetzt weiß ich schon einmal wie ich eine Datenbankverbindung zu MySQL aufbauen kann, Querys absetzen usw.
Aber nun kommt die Frage: Was ist denn wenn ich zu einer anderen Datenbank wechseln möchte? Nehmen wir mal an Postgres oder SQLite.

Die Lösung dafür wäre, wenn ich nun richtig liege, eine Klasse zu schreiben die als Wrapper fungiert und ich sage nur noch die Daten (Datenbankname, Host, User, Passwort) und den Typ (mysql, pgsql, sqlite) und die Klasse übernimmt nun die "Übersetzung" vor. Also lädt z.B. die Klasse MysqlDatabase oder PostgresDatabase in dennen dann der Treiber usw. hinterlegt wurde.

Das ganze ist jetzt doch kein Interface, da ein Interface ja nur ein Grundgerüst einer Klasse ist wie ich diese umzusetzen habe und welche Methoden ich mit @override überschreiben muss. Ist das soweit richtig?

Ich hab soweit schon einmal einen gewissen Aufbau:

public class Database {
private Connection conn = null;
private Instance instance = null;
/*
hier kommen die Objekteigenschaften wie Username, Passwort
und getter/setter hin
*/
private String hostname = null;

public setHostname(String hostname) {
this.hostname = hostname;
}

// konstruktor
public void Database (String hostname....) {
this.setHostname(hostname);
.....
}

// Methoden
public void createDatabaseConnection () {
try {
Class.forName("meinTreiber"); // Datenbanktreiber laden, abhängig von der Datenbank natürlich ein anderer
conn = DriverManager.getConnection(...); // Datenbankverbindung herstellen

} catch {....
..... /* ausfälle abfangen */
}
}
}


Wo ich die Instanz nun noch intiiere muss ich noch rauslesen, habe mich nach der Anleitung hier [1] gerichtet. Die weiteren Methoden zum hinzufügen von Datenbankeinträgen, Löschen, Ändern usw. werden weniger das Problem. Darin setze ich auch die Datenvalidierung um, auch die geringste meiner Sorgen da ich das schon in C++ gemacht habe.

Ich weiß nur nicht wie ich es schaffe, in meinem Programm NUR das Datenbankobjekt zu verwenden und dieses soll dann die richtige Klasse verwenden - das ist Neuland da ich das bisher nicht brauchte.

Ich weiß, es ist vielleicht etwas umständlich, aber es ist ja auch nur eine Übung :) Grundlegend läuft mein Programm schon mit einer MySQL Datenbank, ich hab auch schon Einträge auslesen können. Das mit dem Wrapper wäre jetzt nur das i-Tüpfelchen.

Vielleicht kann mich da jemand aufklären ob ich da nicht völlig auf der falschen Spur bin und trotzdem mit Interfaces arbeiten sollte.

[1] http://www.itblogging.de/java/java-mysql-jdbc-tutorial/
06.09.2011
Lord_Pinhead 778 1 8
1 Antwort
2
Mit einem Wrapper zu arbeiten wäre eine mögliche Lösung. Aus meiner Sicht eleganter ist es aus meiner Sicht, eine konfigurierbare Klasse zu verwenden. Die Konfiguration kannst du in einer Properties-Datei ablegen. Diese Datei kannst du mit der Klasse java.util.Properties auslesen und abfragen. Dann kannst du in der Datei deinen Treibernamen und die Connection-URL ablegen und zur Laufzeit abrufen.
06.09.2011
carlptr 777 1 8
carlptr 777 1 8
1
Das ist eine Idee die am einfachsten umsetzbar wäre. Hast du mal ein Beispiel zur Hand für eine Konfigurierbare Klasse? Weil die Datanbank Queries unterscheiden sich ja ein kleines bisschen, so gibt es in SQLite z.B. keine Limit Anweisung. Die Klasse müsste also anhand der Properties File die entsprechende Klasse laden und im Programm immer die selben Methoden aufrufen. z.B. getFilmeById(Integer id)
Lord_Pinhead 07.09.2011
Oh, ist das vielleicht was du meintest http://openbook.galileocomputing.de/oop/oop_kapitel_07_002.htm#mjc5cb28a57eeadedfbc991e6786b00788
Lord_Pinhead 07.09.2011
Ich hab nochmal durch Foren gelesen, ich schätze mit einer Factory wäre es am einfachsten weil Reflection doch ein bisschen Aufwendig wäre. Lese gerade im "Handbuch für Java Programmierung" das Kapitel durch. Danke erstmal für den Tip.
Lord_Pinhead 07.09.2011

Stelle deine Java-Frage jetzt!