Programm mit DBMS - Entwicklungsumgebung

quidnovi

Erfahrenes Mitglied
Schönen guten Morgen Gemeinde,

ich bitte euch um Hilfe für das Finden der richtigen Entwicklungsumgebung.

Es soll folgendes Projekt umgesetzt werden:
- Ein Programm welches Daten in und aus einer lokalen DB holt.

- Mit diesem Programm arbeitet immer nur ein Anwender,
dem zu Folge gibt es immer nur einen Zugriff auf das Programm sowie dem DBMS.

- Die Datenmenge, welche in dem DBMS gespeichert wird, ist alles andere als
atemberaubend, wird also für kein Betriebssystem ein Problem darstellen.

- Dieses Programm verbindet sich nach Bedarf auch mit einem Server im Inet,
um eventuelle Updates herunterzuladen.

- Wenn das Programm samt DBMS an den Anwender ausgeliefert wird, dann sollte dieses,
egal auf welchem Betriebssystem auch immer, so unkompliziert als möglich installiert
werden können.
Am allerbesten wäre es, wenn sich Programm und DBMS mit Klick auf nur eine .jar
installieren ließe.

- Damit der Anwender dann das Programm samt DBMS voll nutzen kann, sollte er nur auf
ein Icon klicken müssen.


Das sind die Eckdaten und nun die Frage nach der Entwicklungsumgebung,
insbesondere nach dem geeigneten DBMS.

Meine Favoriten wären:
- Eclipse, da weiß ich jetzt nicht ob SE oder EE.
Mit Eclipse SE habe ich schon ein wenig gearbeitet.

- Mysql, weil ich bereits Erfahrung damit habe.

Ich hoffe nun, dass ich alle notwendigen Informationen aufgelistet habe und bitte Euch nun um Eure Tips.

Möchte auch hinzufügen, dass ich Recherchen zur richtigen Entwicklungsumgebung im Inet gestartet habe.
Leider waren die Ergebnisse für mich nicht allzu zufriedenstellend, bzw. recht unübersichtlich, weshalb ich mich nun an Euch wende.

Vielen Dank im Voraus
 
Mit Eclipse kenne ich mich nicht aus, ist aber bestimmt keine schlechte Wahl, wenn du in Java entwickeln willst. Im Grunde brauchst du gar keine Entwicklungsumgebung, nur einen "guten" Texteditor.
Du wirst allerdings ein Problem mit MySql bekommen, wenn du das Produkt verkaufen willst. MySql steht in der freien Version unter der GPL, das heißt jedes Produkt, das du damit machst musst du ebenfalls als GPL (Open Source) veröffentlichen. Es gibt eine kommerzielle Lizenz, die so bei 7000€ anfängt.
Als Alternative bietet sich sqlite an. Das ist zum großen Teil kompatibel mit MySql, ist aber Public Domain, das heißt du kannst damit machen was du willst.
 
Hi ikosaeder,

danke vorerst für Deine Antwort.

Nun bin ich leider nicht so firm in DBMS Dingen, weshalb ich jetzt noch eine Frage nachschieße:
Ich programmiere das ganze in Java, weshalb sich ja auch die H2 Database Engine anbietet.
Meinen Recherchen zu Folge, läuft diese unter der BSD - Lizenz.

Eine Anforderung ist, dass sich das Programm mit einem Server verbindet, auf welchem etwaige Updates zur Verfügung stehen. Meist sind die ServerDB's ja Mysql (weswegen ich ja diese auch in der Applikation verwenden wollte).
Gehe ich richtig in der Annahme, dass H2 und Mysql kompatibel sind?
Also - bei richtiger Konfiguration - ein Datentransfer zwischen den beiden DBMS in beiden Richtungen möglich ist?

Man verzeihe mir bitte diese vielleicht "unsinnigen" Fragen, nur fehlt mir das Basiswissen in diesen Dingen.
 
@quidnovi:
Was ist „Eclipse SE“ bzw. „Eclipse EE“? Ich nutze schon seit Jahren verschiedene Versionen von Eclipse, aber das ist mir noch nicht begegnet.

Für kleine DBs würde ich dir auch zu H2 raten. H2 unterstützt JDBC, die ODBC-Variante von Java, einer allgemeinen API für Datenbanken. Und laut https://en.wikipedia.org/wiki/H2_(DBMS) und http://www.h2database.com/html/license.html steht diese unter der MPL/EPL (Mozilla bzw. Eclipse Public License).
Gehe ich richtig in der Annahme, dass H2 und Mysql kompatibel sind?
Wie meinst du das? Es gibt für beide eine JDBC-API. Die SQL-Befehle unterscheiden sich aber ein bisschen.
Zum Einstieg würde ich dir Kapitel 17 der JavaInsel empfehlen: http://openbook.galileocomputing.de/javainsel/javainsel_17_001.html , darin ist noch vom H2-Vorgänger HSQLDB die Rede.
 
Ach ja, und wenn du mit größeren Datenmengen arbeiten möchtest, rate ich dir dringend zur Verwendung einer Objektdatenbank wie db4o raten. Das ist aber auch wieder doppellizenziert (GPL+proprietär/Kostenpflichtig).

Und Server-DBs sind auf PHP-Servern meist MySQL. Auf „richtigen“ Servern dürfte es aber mehr geben.
 
Nabend...

Eclipse ist als IDE schon sehr gut. Im Prinzip ist es aber egal ob du Eclipse, Netbeans, JBoss Developer Studio ... und wie sie alle heißen, verwendest. Du brauchst als Feature "code completion", was dir die möglichen Methoden vorschlägt und automatisch einfügt. Und das beherrschen die IDEs alle.

Je nachdem wie "gut" du deine Anwendung aufbauen möchtest - soll heißen ob du dich an aktuelle Frameworks halten willst und auf "best practice" setzen möchtest - ist die Lernkurve entsprechend hoch.

Mein Vorschlag:
Je nachdem wie kompliziert dein Datenmodell ist, solltest du dich mit objektrelationalem mapping befassen. Als Stichwort hier sei mal "Hibernate" genannt. Es gibt aber auch andere Implementierungen. Das ganze erspart dir SQL in deinem Quellcode zu tippen, ist aber auch zum Einstieg nicht umbedingt leicht. Als einfaches Beispiel mal folgendes:

Objekte: Person, Adresse

Eine Person hat n Adressen. In der Datenbank hättest du jetzt 3 Tabellen - eine für die Person, eine für die Adressen und eine Verknüpfungstabelle. Der Code "zu Fuß" würde jetzt INSERT, UPDATE, DELETE Anweisungen auf entsprechende Tabellen enthalten. In einem kleinen Datenmodell kann man das zwar noch im Griff haben, aber komfortabel ist das auch schon nicht mehr.

Wenn du OR (Objektretalionales Mapping) verwendest, dann baust du dir für deine Objekte (Entitäten) Java-Objekte (POJOs) und versiehst diese mit Annotationen. Jede Entität bekommt die Annotation @Entity vor der class Anweisung. Optional kannst du hier auch den Tabellennamen mitgeben. Dazu setzt du zusätzlich die Annotation @Table(name="Tabellenname") mit vor die class Anweisung. Um die Relation abzubilden (in diesem Beispiel eine 1:n Beziehung - eine Person hat n Adressen) setzt du vor die getter-Methode der Adresse in der Klasse Person eine Annotation @OneToMany.
Es gibt gute Tutorials, die die Konfiguration eines OR zeigen. Für deinen Fall in einer Standalone Anwendung musst du eine SessionFactory konfigieren, die dir die Verbindung zur Datenbank herstellt und sich um Transaktionen kümmert. Hört sich vllt. kompliziert an, ist es aber nicht!

Wenn du das oben beschriebene Vorgehen in deine Anwendung einbaust, dann sparst du dir den SQL-Code in deinem Quellcode und es ist egal welche Datenbank du verwendest. Die Zwischenschicht (JPA) kümmert sich um die korrekte Formulierung der SQL-Statements. Für das Speichern, Aktualisiern, Löschen, Lesen (CRUD) erstellt man pro Entität ein DAO (DataAccessObject) - oder ein generisches, welches für alle Entitäten funktioniert. Auch hier für findest du viele Quellcodevorlagen.

Um eine neue Person anzulegen erzeugst du einfach ein neues Objekt der Klasse Person, setzt die Attribute der Klasse
z.B.
person.setName("Kalle");

... dann erzeugst du das DAO:
PersonDAO personDAO = new PersonDAO();

und rufst auf den DAO personDAO.persist(person); auf.

Damit hast du die Person in der Datenbank angelegt. Abhängige Objekte, die an der Person hängen werden auch in die Datenbank übertragen. (dazu musst du an der Annotation @OneToMany(cascade=CascadeType.PERSIST) zupacken).

Damit in der Klasse Person "Primärschlüssel" automatisch erzeugt werden, legst du in der Klasse eine id fest, z.B.

private long personId;

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public long getPersonId(){
return this.personId;
}

Dadurch wird automatisch ein Schlüssel für dich erzeugt.

Vielleicht wird dir klar, was für Vorteile du hast, wenn du deine Datenbankzugriffe "abstrahierst".
--> egal welche Datenbank du verwendest
--> kein SQL in deinen Java-Klassen
--> einfaches Handling mit Objekten
--> Typsicherheit! Die Datentypen sind von vornherein klar.

Das war ein kleiner Einblick in das Thema... aber es lohnt sich das auf diese Weise anzugehen.

Für die Datenbank kannst du doch hsqldb nehmen, oder von Apache die Derby. MySQL muss nicht zwangsweise ausscheiden. Man sollte sich Informieren, was man alles genau von seiner Anwendung preisgeben muss.

Viel "Spaß" (macht es wirklich - auch wenn zu Anfang oft erst der Frust kommt ;-) beim Hacken.

Gruß,
jochen
 
@quidnovi:
Was ist „Eclipse SE“ bzw. „Eclipse EE“? Ich nutze schon seit Jahren verschiedene Versionen von Eclipse, aber das ist mir noch nicht begegnet.
"SE": Standard Edition
"EE": Enterprise Edition
Wie schon geschrieben, ich weiß noch nicht genau, welche ich nun verwende.
Dreh und Angelpunkt wird die Implementierung des DBMS in die IDE sein


Wie meinst du das? Es gibt für beide eine JDBC-API. Die SQL-Befehle unterscheiden sich aber ein bisschen.
Da habe ich mich ein wenig zu ungenau ausgedrückt.
Auf dem Server liegt eine DB mit denselben Tabellen wie in der Software.
Das Ziel ist, die Einträge mittels Timestamp abzugleichen und auf Bedarf zu synchronisieren. Die aktuellere befindet sich wenn, dann immer am Server.


Zum Einstieg würde ich dir Kapitel 17 der JavaInsel empfehlen: http://openbook.galileocomputing.de/javainsel/javainsel_17_001.html , darin ist noch vom H2-Vorgänger HSQLDB die Rede.
Danke fürn Tip :)


Ach ja, und wenn du mit größeren Datenmengen arbeiten möchtest,...
Nunja...es sind nicht allzuviele Datensätze. Diese sind meist int - Werte und die Queries sind nicht kompliziert, ich joine nicht. Auch greift ja immer nur ein User auf die DB zu.
Demzufolge sollte die H2 schon reichen....so meine Anschauung :)



@jottes
Wow...vielen Dank für Deine ausführlichste Antwort...beeindruckend...wirklich :)

"OR" klingt sehr vielversprechend, spitzen Tip.
Werde mich in diese Richtung mal schlau machen.



Nun möchte ich mich nochmals bei Euch bedanken...bin über die Hilfsbereitschaft der hiesigen Gemeinde immer wieder begeistert :)

SoLong derweil
quidnovi
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück