# Datenbank - Textfiles - Anderes



## CroweHammer (6. Mai 2010)

Sers Leute,

wie sicher einige von euch mitbekommen haben, werde ich mich in naher Zukunft daran machen ein Filmmanagement zu schreiben.
Sollte ich ein halbwegs benutzerfreundliches Programm zustande bringen, was nicht ausgeschlossen ist, stell ich mir nun folgende Frage.
Wenn ich mein Programm mehreren Leuten, die jeder einen eigenen Rechner besitzen zur Verfügung stellen will, wie bewerkstellige ich das am geschicktesten? 
Ihre Daten, die sie in dem Programm z.B. für Filmeinträge speichern müssen ja immer zur Verfügung stehen, daher frage ich mich wie das normalerweise gelöst wird. Brauch ich eine eigene Installation, welche ein paar lokale Ordner auf dem vorgesehenen Rechner anlegt und ich dort meine Daten z.B. in Txt-Form übermittel. Oder geht sowas über eine Datenbank, ohne dass die User diese Datenbank bei sich auf dem Rechner selbst anlegen müssen? Wer hat Erfahrung damit oder wer weiß wie man sowas am geschicktesten löst?

gruß und danke

CroweHammer


----------



## Sergeant_Pepper (6. Mai 2010)

CroweHammer hat gesagt.:


> wie sicher einige von euch mitbekommen haben, werde ich mich in naher Zukunft daran machen ein Filmmanagement zu schreiben


im Radio kam nix, in der Zeitung stand es auch nicht, Tom Buhrow weiß von nichts ;-)


> Ihre Daten, die sie in dem Programm z.B. für Filmeinträge speichern müssen ja immer zur Verfügung stehen, daher frage ich mich wie das normalerweise gelöst wird. Brauch ich eine eigene Installation, welche ein paar lokale Ordner auf dem vorgesehenen Rechner anlegt und ich dort meine Daten z.B. in Txt-Form übermittel. Oder geht sowas über eine Datenbank, ohne dass die User diese Datenbank bei sich auf dem Rechner selbst anlegen müssen? Wer hat Erfahrung damit oder wer weiß wie man sowas am geschicktesten löst?


Soll jeder Benutzer mit seiner eigenen Datenbank arbeiten? Oder sollen alle auf die gleichen Daten zugreifen?
Arbeiten die Benutzer in so etwas wie einem Team, in einer Firma, in einem Verein? Will sagen: sitzen die alle in einem Intranet?
Oder willst du damit "fremde" Leute im Internet ansprechen?


----------



## CroweHammer (6. Mai 2010)

hier findest du was es besser über mein Projekt zu sagen gibt:
http://www.java-forum.org/allgemeine-java-themen/99713-filmverwaltung.html

Ich will damit die Privatanwender ansprechen, demzufolge hat jeder seine eigenen Daten und muss nicht auf die von anderen zugreifen. Dafür würde ich höchstens eine Möglichkeit zum Im-und Export von Daten zur Verfügung stellen.


----------



## Sergeant_Pepper (6. Mai 2010)

ja, nach einer Suche habe ich den Thread gefunden.

Für so was musst du eine Server-basierte Webanwendung schreiben.

Du willst den Nutzern ja nicht zumuten, für jede Recherche auf dem lokalen System eine DB zu installieren.

MySQL und PostgreSQL kennst du ja schon, die müssen vom Webserver aus erreichbar sein.

Möglichkeiten, die Anwendung zu realisieren, gibt es sehr viele. Die Themen MVC (Model-View-Controller), Java Server Faces (JSF) könnten da interessant sein. Oder du nimmst statt JSF "Apache Wicket"... sind nur einige von vielen Schlagwörtern.

Wieviel Erfahrung hast du schon?


----------



## Gas (6. Mai 2010)

Wenn jeder Nutzer eine eigene Datenbank hat und diese auch nur lokal und Internet für dein Programm eigentlich auch gar nicht benötigt wird (außer vielleicht als Feature um Infos über Filme aus dem Netz zu laden), dann kann ich dir zum Speichern der Daten eine embedded H2 Datenbank empfehlen: H2 Database Engine


----------



## Sergeant_Pepper (6. Mai 2010)

Gas hat gesagt.:


> Wenn jeder Nutzer eine eigene Datenbank hat und diese auch nur lokal und Internet für dein Programm eigentlich auch gar nicht benötigt wird


aus dem Thread, den der TS oben verlinkt hat, geht was anderes hervor


----------



## CroweHammer (6. Mai 2010)

Mit Derby hatte ich mein letztes Projekt gemacht. Dort gibt es auch einen embedded-Treiber, ist es dass was du meinst?
Ich hab ein wenig Erfahrung mit Derby, mySQL und PostgreSQL, allerdings hatte ich immer nur Projekte am laufen, welche ich nur auf meinem Rechner laufen lassen musste.
Richtig, natürlich will ich es niemanden zumuten, dass er vorher erst noch eine Datenbank anlegen muss.


----------



## Sergeant_Pepper (6. Mai 2010)

CroweHammer hat gesagt.:


> Richtig, natürlich will ich es niemanden zumuten, dass er vorher erst noch eine Datenbank anlegen muss.


also eine Webanwendung. Wie gesagt, ein *SEHR* weites Feld ...

Fang klein an.
Auf jeden Fall musst du HTML können (nicht schwierig. Kannst du schon?)
Es gibt 'ne Menge Bücher dazu... (Verlage Addison-Wesley, d-punkt)
Online-Tutorials ...(z.B. Document Information - The Java EE 5 Tutorial)

Das Thema ist *viel* zu groß für einen einzelnen Thread ("wie geht das?")


----------



## FArt (6. Mai 2010)

Nimm eine kleine DB, evtl. eine, die man u.U. auch im "InProcess-Mode" betreiben kann... HSQLDB, Derby, H2


----------



## CroweHammer (6. Mai 2010)

wieso eine Webanwendung, das Programm läuft doch lokal auf einer Maschine, die Daten sollen ebenfalls lokal gespeichert werden und das Internet ist nur dazu da um automatische Abgleiche zu machen. Was ist die Ursache, dass du meinst es würde eine Webanwendung werden?
Html, CSS sind aber natürlich in meinem Wissenstand schon integriert.


----------



## Sergeant_Pepper (6. Mai 2010)

CroweHammer hat gesagt.:


> Ich will damit die Privatanwender ansprechen, demzufolge hat jeder seine eigenen Daten und muss nicht auf die von anderen zugreifen. Dafür würde ich höchstens eine Möglichkeit zum Im-und Export von Daten zur Verfügung stellen.





CroweHammer hat gesagt.:


> Richtig, natürlich will ich es niemanden zumuten, dass er vorher erst noch eine Datenbank anlegen muss.



Das bedeutet, dass sich Benutzer bei deiner Anwendung identifizieren müssen. Denn wenn ein Benutzer in einer Sitzung in der Web-DB Daten ablegt, dann will er sie in der nächsten Sitzung wahrscheinlich auch wieder abrufen/bearbeiten können. Jeder braucht also eine persönliche ID und einen eigenen Datenbereich (nicht gemeint: eigene DB-Tabellen).


----------



## CroweHammer (6. Mai 2010)

Lässt sich ein Login nur über das Web bewerkstelligen? Die Frage ist, ob ich überhaupt ein Login brauche für mein Filmmanagement, wenn es lokal auf einem Rechner läuft?


----------



## Sergeant_Pepper (6. Mai 2010)

CroweHammer hat gesagt.:


> wieso eine Webanwendung, das Programm läuft doch lokal auf einer Maschine, die Daten sollen ebenfalls lokal gespeichert werden und das Internet ist nur dazu da um automatische Abgleiche zu machen.


Das bedeutet: ein potenzieller Nutzer muss die Anwendung erst aus dem Web herunterladen?
Oder willst du ein Applet schreiben und das über eine HTML-Seite oder über Java-Webstart verfügbar machen? Würde ich nicht tun... Applets sind Mist.
Erst recht, wenn ein Applet, dass aus dem Internet geladen wird, auf lokal gespeicherte Daten zugreifen soll.


> Html, CSS sind aber natürlich in meinem Wissenstand schon integriert.


klingt gut


----------



## CroweHammer (6. Mai 2010)

Sergeant_Pepper hat gesagt.:


> Das bedeutet: ein potenzieller Nutzer muss die Anwendung erst aus dem Web herunterladen?


genau das ;-)


----------



## Sergeant_Pepper (6. Mai 2010)

Du hast oben irgendwo geschrieben, dass lokale Daten mit einer DB auf dem Webserver abgeglichen werden sollen.
Was *genau* heißt das?

Was soll z.B. passieren, wenn verschiedene Benutzer (die womöglich nichts voneinander wissen), die gleichen Filme abgleichen wollen? Bedeutet abgleichen, dass die Benutzer etwas in die zentrale DB hineinschreiben können? Was soll bei widersprüchlichen Aktionen passieren? (Regisseur von "Troja"= Ridley Scott , Regisseur von "Troja"=Wolfgang Petersen)

Dein Ansatz setzt auch voraus, dass sich jeder Benutzer ein Java-Plugin herunterladen und installieren muss. Würdest du das tun, um bei eBay einzukaufen, in einem Online-Shop was zu bestellen, um bei Wetter-Online Infos zu suchen?


----------



## CroweHammer (6. Mai 2010)

okay, dann werde ich es so machen, dass man sich nicht einloggen muss, sondern, dass es einfach ein Programm wird wie man es sich vorstellt. Man öffnet es und kann damit arbeiten. Ein Datenaustausch wird dann also nur mittels Import-Export möglich sein, dass hilft weiter bei der Lösung oder?


----------



## Sergeant_Pepper (6. Mai 2010)

CroweHammer hat gesagt.:


> okay, dann werde ich es so machen, dass man sich nicht einloggen muss, sondern, dass es einfach ein Programm wird wie man es sich vorstellt. Man öffnet es und kann damit arbeiten.


OK, aber das hat dann rein *gar nichts mehr* mit den Beispiel-Links aus dem anderen Thread zu tun.



> Ein Datenaustausch wird dann also nur mittels Import-Export möglich sein, dass hilft weiter bei der Lösung oder?


Kommt drauf an, was du unter Datenaustausch verstehst. Im einfachsten Fall lädt der Benutzer die Daten vollständig aus der Web-DB und überschreibt alle eigenen. Dabei gehen seine persönlich erfassten Informationen verloren. Wenn du das nicht willst, wird es komplizierter.
Und wenn die Benutzer die zentrale DB mit ihren eigenen Daten anreichern sollen, wird es noch komplizierter.


----------



## CroweHammer (6. Mai 2010)

ich glaub wir reden aneinander vorbei, weil im "Filmverwaltung"-Thread soviele Anregungen standen, die ich nicht alle berücksichtigen können werde.
Es gibt keine WEB-DB es soll lokal laufen. Import-Export in nicht automatisierter Form meine ich. D.h. Benutzer A exportiert sich die gewünschten Daten und kann sie an Benutzer B geben, welcher sie wieder importieren kann.


----------



## Sergeant_Pepper (6. Mai 2010)

CroweHammer hat gesagt.:


> Benutzer A exportiert sich die gewünschten Daten und kann sie an Benutzer B geben, welcher sie wieder importieren kann.


Dann geht bei Benutzer B alles verloren, was B vorher erfasst hat?


----------



## Gas (6. Mai 2010)

Wie ich bereits erwähnte und es auch FArt erwähnt hat: H2 Database Engine
Schau dir das mal an.

Wenn du kein SQL magst oder dich nicht darin einlernen möchtest, dann kannst du theoretisch auch die Persistenz in Dateien vornehmen. (XML oder was eigenes).


----------



## CroweHammer (6. Mai 2010)

Nein, das sollte natürlich nicht der Fall sein. Nur eine Ergänzung, sonst wärs ja sinnfrei.


----------



## CroweHammer (6. Mai 2010)

Statt dieser H2 Engine könnte ich auch Derby verwenden, richtig?
In SQL hab ich mich schon eingelebt und das würde ich ja auch bei Derby verwenden.
Also der entscheidende Tipp wäre eine DB mit embedded Treiber zu verwenden?


----------



## reinsle (6. Mai 2010)

Hy

also ich denke, ob du Hsql oder Derby verwendest, ist in erster Linie egal. Du kannst beide als Embedded Datenbanken betreiben, und hast damit die Datenbank in der JVM der Anwendung mit dabei, es mus nichts mehr zusätzlich installiert werden. Wozu du dir schon ein paar Gedanken machen solltest, ist die Art der Persistierung (JPA, Hibernate, JDO ....).

Robert


----------



## CroweHammer (6. Mai 2010)

ist das so wichtig, dass man mit einer objektdatenbank arbeitet?


----------



## reinsle (6. Mai 2010)

Hm, du kannst sicherlich auch rein mit SQL drauf zugreifen, aber davon rate ich dir ab. Du hast ein Objectorientiertes System und arbeitest mit Relationalen Daten. 

So lang du da nur ein paar SQL-Statements brauchst, dann ja, ansonsten würde ich mir da schon eine Persistence-Schicht einziehen. Da tust du dir hinterher viel leichter.

Robert


----------



## CroweHammer (6. Mai 2010)

wenn dann würde ich es mittels Hibernate versuchen. Hast du darin Kenntnisse?


----------



## reinsle (6. Mai 2010)

Ja, ich habe schon einiges mit Hibernate, aber auch mit JPA umgesetzt. Würde ich heute ein Projekt neu aufsetzen würde ich JPA und als Vendor Hibernate einsetzen.

http://javathreads.de/2008/04/jpa-mit-hibernate-einfuehrung/

Robert


----------



## CroweHammer (6. Mai 2010)

okay ich werde mir das mal anschauen. danke


----------



## reinsle (6. Mai 2010)

Bitte. 

Wenn Fragen dazu hast, meld dich einfach.


----------



## CroweHammer (6. Mai 2010)

die werden mit Sicherheit kommen ;-)

grüße crowehammer


----------



## FArt (6. Mai 2010)

reinsle hat gesagt.:


> Bitte.
> 
> Wenn Fragen dazu hast, meld dich einfach.



Ja, aber erst nach einer Runde Nachdenken, Google, Forensuche, ...


----------



## CroweHammer (6. Mai 2010)

passt schon. ich mach den ganzen Tag nichts anderes als Programmieren, Googeln, nachdenken etc., ist mein Job. Manchmal hilft es einfach über eine Problematik mit anderen Leuten diskutiert zu haben um auf einen grünen Zweig zu kommen.

gruß


----------



## Sergeant_Pepper (6. Mai 2010)

CroweHammer hat gesagt.:


> Nein, das sollte natürlich nicht der Fall sein. Nur eine Ergänzung, *sonst wärs ja sinnfrei.*



Eben das wollte ich ausdrücken, als ich nachgebohrt habe. Aber dann musst du dir überlegen, wie du mit Daten-Konflikten umgehst (wenn z.B. Benutzer B Daten importieren will, die im Widerspruch zu seinen eigenen, schon vorhandenen Daten stehen)



			
				reinsle hat gesagt.:
			
		

> Hm, du kannst sicherlich auch rein mit SQL drauf zugreifen, aber davon rate ich dir ab. Du hast ein Objectorientiertes System und arbeitest mit Relationalen Daten.
> So lang du da nur ein paar SQL-Statements brauchst, dann ja,



Nach meiner Meinung sollte jeder, der sich ernsthaft mit DBs beschäftigt, SQL kennen, verstehen und schreiben können. Zumindest Abfragen, die auf mehr als eine Tabelle zugreifen. SQL und DBs gehören zusammen wie mehr Meer und Strand... 
Das soll aber kein Argument gegen Hibernate, JPA o.ä. sein.


----------



## CroweHammer (6. Mai 2010)

Ich kenne SQL, verstehe es und kann es auch schreiben und mein Programm würde sicherlich auch ohne Hibernate etc. laufen.
Allerdings ist halt die Sache, dass an dieser Stelle eine Verletzung gegen die Objektorientierung besteht, aber stört das wirklich an dieser Stelle? Ich finde nur geringfügig.
Ich bin nicht zu faul Hibernate oder ähnliches zu lernen, aber tut das wirklich not? *g*


----------



## JohannisderKaeufer (6. Mai 2010)

Ist es nicht völlig nebensächlich welche DB-Engine, Textfile oder welches Persistenzframework verwendet werden?

Ja, es ist völlig nebensächlich.

Für den ersten Schritt reicht es m.E. vollkommen aus simple POJOs zu verwenden.

Danach kann mein eine Schicht nach dem  DAO-Pattern einziehen, bevor man sich schlußendlich für eine Persistenzgeschichte entscheidet.

Wenn die ersten Punkte halbwegs stimmen ist der Rest mit der Persistenz ein Kinderspiel. 

Wenn man sich von Anfang an für SQL entscheidet, was ja legitim ist, und damit arbeitet hat man häufig seine Statements an Stellen an denen Sie nicht hingehören. Mit Hibernate kann es genauso laufen. Dann gibt es halt HSQL-Querries in der Gui, die Filme nach Schauspielern und Genre sortieren. Ein sauberer objektorientierter Ansatz und das ganze macht auch noch richtig Spaß.

Während der Entwicklung reicht es doch, wenn die ganze Anwendung transient in memory läuft.


----------

