# Einstieg in Java Datenbank



## Letavino (11. Feb 2011)

Guten Tag,

für ein Projekt bemötige ich eine Datenbank. 
Nach einem querlesen der Thematik stellen sich mir einige grundlegende Fragen, die ihr mir hoffentlich beantworten könnt.

Das Umfeld: Das Programm mit Datenbank soll überschaubar klein gehalten werden auf diversen Computern laufen und daher wäre es gut, wenn es sich ohne großen Installationsaufwand realisieren ließe.
Ob nur Windows, oder auch andere betriebssysteme betroffen sind, kann ich zu diesem Zeitpunkt noch nicht sagen.

1.) Doch, da es so viele Datenbanken gibt, welche wäre hierfür am besten geeignet? MySQL? .mdb?

2.) Dafür benötige ich ja einen Treiber. Wird dieser letztendlich in die .jar hineingepackt, oder muss dieser auf jedem Pc neu installiert werden?

3.) Würde es funktionieren, im Endeffekt ein portables Programm zu haben, welches einfach aus einer Java Datei und einer Datenbank Datei besteht?

Ich hoffe, ihr könnt einem Anfänger helfen, meine Grundsatzfragen zu verstehen 

Lg, Florian


----------



## maki (11. Feb 2011)

1., 2., 3. Derby/JavaDB, H2, HSQL, all diese Datenbanken können das was du willst, Treiber kommen als Jar.

JDBC als Grundlage ist Pflicht


----------



## Letavino (11. Feb 2011)

Ich danke dir! 
Dann werde ich mich wohl mal mit der Derby Datenbank ein wenig beschäftigen.
Auch, wenn das ganze für Anfänger doch schon etwas komplizierter wird, als es bei PHP der Fall war.

Kennt einer ein gutes Schritt für Schritt Tutorial, bei dem nicht allzuviel Vorwissen verlangt wird?


----------



## maki (11. Feb 2011)

Ich empfehle grundsätzlich die Doku zu lesen, dazu noch die Grundlagen: JDBC.

Mit Java solltest du dich aber schon auskennen, zB. den Unterschied zwischen checked und unchecked Exceptions solltest du nciht erst lernen wenn du darauf triffst, JDBC etc. sind Dinge dir nciht für Java Anfänger gemacht worden sind um die Sprache zu erlernen.

Dein Vergleich mit PHP lässt befürchten, dass du der Meinung bist WebApps sind mit Java ähnlich simpel zu erstellen, was Grundlegend falsch ist. Hoffe meine Befürchtung ist falsch


----------



## Gast2 (11. Feb 2011)

Kleiner Einstieg mit MySQL
MySQL and Java JDBC - Tutorial


----------



## hansmueller (11. Feb 2011)

Hallo,

arbeite auch zur Zeit mit Derby.

Hier ein paar interessante Links:
JavaDB / Derby Grundlagen
Help - IBM
Apache Derby: Documentation

Die Scherer-IT-Seite ist für den Einstieg ganz gut geeignet.
Die Apache-Seite und IBM-Seite gehen dann ans Eingemachte.

MfG
hansmueller


----------



## Letavino (11. Feb 2011)

@maki:
Prozedurales Programmieren beherrsche ich mittlerweile iegntlich relativ gut, deswegen habe ich einfach nach etwas gesucht, was ein Stück komplexer ist und weiter in die Welt des Javaprogrammierens eintauchen lässt, aber da war mein Schritt fürs erste wohl noch ein wenig zu groß. 

Ja, ich kann dich beruhigen.
Ich weiß, dass WebApps nicht unbedingt mit PHP programmierten Seiten zu vergleichen sind.
Ich brachte den Vergleich im bezug auf die Datenbankanbindung auch nur, weil ich mich vorher ziemlich mit PHP beschäftigt hatte und die SQL ja an sich gleich ist. (oder täusche ich mich da?)

Bei meinem jetzigen Projekt soll es sich aber auch im eine Offline Application handeln.

@andere:
Vielen Dank. Ich werde mich einmal durch die verschiedenen Seiten lesen und hoffen, dass sie mir weiter helfen.


----------



## frapo (11. Feb 2011)

Letavino hat gesagt.:


> und die SQL ja an sich gleich ist. (oder täusche ich mich da?)



Nee, da liegst Du schon ganz richtig. 
Es gibt vielleicht immer gewisse Feinheiten, doch die Mehrheit der DB-Hersteller ist bemüht Standards einzuhalten: SQL ? Wikipedia 

Derby hat den Ruf sehr DB2 nah zu sein, bei H2 kann man verschiedene Kompatibilitäten auswählen:
H2 - Compatibility.



Letavino hat gesagt.:


> Bei meinem jetzigen Projekt soll es sich aber auch im eine Offline Application handeln.



Was meinst Du genau mit Offline? Konsolenanwendnung oder etwas mit GUI?


----------



## maki (11. Feb 2011)

> Prozedurales Programmieren beherrsche ich mittlerweile iegntlich relativ gut, deswegen habe ich einfach nach etwas gesucht, was ein Stück komplexer ist und weiter in die Welt des Javaprogrammierens eintauchen lässt, aber da war mein Schritt fürs erste wohl noch ein wenig zu groß.


Würde dir raten dich erstmal konkret mit Java und OOAD zu befassen 
Ist einfacher als zu versuchen Java, OOAD, JDBC etc. auf einmal zu erlernen.


----------



## Letavino (11. Feb 2011)

frapo hat gesagt.:


> Was meinst Du genau mit Offline? Konsolenanwendnung oder etwas mit GUI?



Zum testen soll er erstmal eine Konsolenanwendung sein, das Thema GUI nehme ich mir danach vor, wenn ersteres soweit klappen sollte.
Mit Offline meinte ich, dass das Programm aud dem Desktop und nicht auf einem Server laufen soll, also als Applikation und nicht als Applet (ich hoffe, ich verwende die Begriffe gerade richtig).



maki hat gesagt.:


> Würde dir raten dich erstmal konkret mit Java und OOAD zu befassen
> Ist einfacher als zu versuchen Java, OOAD, JDBC etc. auf einmal zu erlernen.



Durch das ganze Querlesen bekommt man aber teilweise schonmal einen recht guten Überblick über Java, was doch recht nützlich sein kann.
Aber ich werde versuchen, mich nicht zu übernehmen 

Noch eine Frage:
Beim Einbinden der Treiber lese ich über wieder vom Classpath. 
Ist das einfach der Ordner, wo die Class Dateien abgelegt sind?
Also: "\workspace\Projekt\bin"?
Muss der Datenbanktreiber einfach dort hinein kopiert werden und fertig?


----------



## maki (11. Feb 2011)

Der Classpath ist eine grundlegende Eigenschaft von Java Software, damit bestimmt man, welche Jars, .class Dateien und Ressourcen einem Programm zur Verfügung stehen.

In deinen Eclipse Projekt erstellt du einen Ordner namens "lib" und kopierst dort die JDBC Treiber Jar rein, und andere Jars die du sonst noch so brauchst.
Dann legst du in den projekteigentschaften fest, dass diese JArs zum "Buildpath" gehören:
Rechtsklicks auf Projekt -> Java Build Path -> Reiter Libraries -> Add JARs Button und dann die Jar auswählen

Lesetipp: Setting the class path
Solltest (wie auch beschrieben) nicht eine Umgebungsvariable setzen und auch nix in JAVA_HOME/lib/ext kopieren.


----------



## frapo (11. Feb 2011)

Letavino hat gesagt.:


> Zum testen soll er erstmal eine Konsolenanwendung sein, das Thema GUI nehme ich mir danach vor, wenn ersteres soweit klappen sollte.
> Mit Offline meinte ich, dass das Programm aud dem Desktop und nicht auf einem Server laufen soll, also als Applikation und nicht als Applet (ich hoffe, ich verwende die Begriffe gerade richtig).



Hört sich schon sehr vernünftig an!  Erst die Konsole, die GUI wird noch eine ganz andere Baustelle werden 



Letavino hat gesagt.:


> Noch eine Frage:
> Beim Einbinden der Treiber lese ich über wieder vom Classpath.
> Ist das einfach der Ordner, wo die Class Dateien abgelegt sind?
> Also: "\workspace\Projekt\bin"?
> Muss der Datenbanktreiber einfach dort hinein kopiert werden und fertig?



Ist schon so, der Classpath zeigt den Weg auf jars die Du einbinden möchtest. Der Pfad zu den SDK-Standard Klassen sollte dem System ja schon bekannt sein (weiß jetzt nicht welches OS Du hast).

Bei Projekten bietet sich vielleicht auch an ein Verzeichnis (z.b. namens lib) anzulegen, wo Du dann externe jars (also nicht zum SDK gehörig) ablegen kannst. Die jars in diesem Verzeichnis, musst Du dann Deiner IDE noch bekanntmachen. In dem Falle kümmert sich dann die IDE im Hintergrund um die weiteren Angaben zum Classpath.

edit: wie so oft war ich zu langsam


----------



## Letavino (11. Feb 2011)

So, nun klappt es soweit 

Und da die SQL Abfragen ja sehr ähnlich der in PHP verwendeten Abfragen sind, sollte ich den Rest auch hinbekommen 

Vielen Dank für die sehr gute und schnelle Hilfe!


:toll:


----------



## maki (11. Feb 2011)

> Und da die SQL Abfragen ja sehr ähnlich der in PHP verwendeten Abfragen sind, sollte ich den Rest auch hinbekommen


Dazu dann noch ein Tipp: PreparedStatements
Verstehe sie, nutze sie, frickle deine SQL Statements nicht aus Strings und normalen Statements zusammen


----------



## Letavino (11. Feb 2011)

Wird für den Anfang zwar noch nicht so wichtig sein, aber man sollte sich ja gleich einen guten Stil angewöhnen. 

Vielen Dank nochmal!


----------



## maki (11. Feb 2011)

Ist spätestens dann wichtig wenn es um die Konvertierung von Parametern geht, zB. Date, das nimmt dir ein PreparedStatement ab, und natürlich wegen des Klassikers:


----------



## Letavino (11. Feb 2011)

Hehe 

Also wirklich lieber gleich mit Prepared Statements angewöhnen.
Hab ich mir auch gerade nochmal bei wiki ducrhgelesen, auch was das Thema SQL-Injections betrifft.

Danke.


----------

