# Datenbanken in Java



## GhostfaceChilla (4. Nov 2013)

Hallo Leute 
Ich wollte mich nun einmal näher mit Datenbanken beschäftigen und habe mal ein bisschen rumgeschaut aber i-wie werde ich nicht aus alelm schlau.
Daher wollte ich mal fragen:
1. Wie erstelle ich überhaupt eine Datenbank mit Daten?(Programmiere ich sie oder gibt es Tools zur einfachen Erstellung einer Datenbank?)
2. Docke ich an alle Datenbanken gleich an, also 
	
	
	
	





```
Class.forName(), DriverManager.getConnection("...")
```
3. Was brauche ich noch um eine Datenbank zu verwalten?

Ich hoffe ihr könnt mir ein bisschen helfen. Danke shconmal im Voraus 

-GhostfaceChilla-


----------



## turtle (4. Nov 2013)

1. Wie erstelle ich überhaupt eine Datenbank mit Daten?(Programmiere ich sie oder gibt es Tools zur einfachen Erstellung einer Datenbank?)
Kommt drauf an, wie deine bevorzugte Methode zum Zugriff ist. Bei Hibernate/JPA gibt es Verfahren aus denen die DB erstellt werden kann. Ich rate dir aber, dies selber zu machen und es mit SQL zu machen.
Daten in eine DB spielst du ebenfalls per SQL ein. Daher bin ich ein Fan von myBATIS, weil damit direkt mit SQL mit der DB gearbeitet werden kann. Gute Java-DB sind beispielsweise H2, HSQLDB, oder Derby.
2. Docke ich an alle Datenbanken gleich an, also
Java Code:  Quelltext in neuem Fenster öffnen
Class.forName(), DriverManager.getConnection("...")
Diese Zeile ist neuerdings nicht mehr notwendig, also vergesse sie gleich wieder.
3. Was brauche ich noch um eine Datenbank zu verwalten?
Ein gutes SQL-Tool ist hilfreich und ich nehme immer Squirrel.


----------



## ARadauer (4. Nov 2013)

Eine Datenbank erstellt man nicht, die verwendet man. oder wie meinst du das?


----------



## GhostfaceChilla (4. Nov 2013)

turtle hat gesagt.:


> 2. Docke ich an alle Datenbanken gleich an, also
> Java Code:  Quelltext in neuem Fenster öffnen
> Class.forName(), DriverManager.getConnection("...")
> Diese Zeile ist neuerdings nicht mehr notwendig, also vergesse sie gleich wieder.
> /"]Squirrel[/URL].


Was heißt diese Zeilen sind nicht mehr notwendig wie funktioniert das ab jetzt?
Und gibts es sowas wie eine Entwicklungsumgebung?

-GhostfaceChilla-


----------



## Tobse (4. Nov 2013)

Ich habe das ganze übers web kennengelernt und bin mit der Kombo PHP-MySQL sehr vertraut, deshalb das ganze am Beispiel von SQL Servern.
Den häufigsten aufbau von Datenbanken wirst du etwa so vorfinden:

1. Ein datenbankserver, der die daten hat und auf dem eine Software läuft, etwa MySQL oder OracleDB
2. Eine Software, um den zu verwalten; sei es Access, Squirrel (wie gennannt) oder phpMyAdmin

Einen MySQL-Server einzurichten ist nicht wirklich schwer und mit einem lokalen phpMyAdmin kannst du da auch bequem Tabellenstrukturen anlegen und verwalten. Verbinden kann sich ein Java programm über den entsprechenden SQL-Driver den du auf der Hompage der Server-Software, die du verwendest, finden wirst. Dann kannst du dich per DriverManager#getConnection anmelden und Statements abfeuern


----------



## GhostfaceChilla (4. Nov 2013)

Vielen Dank an euch alle 
Bin jetzt im Internet auf MySQL gestoßen, heir gibt es auch ein Programm namens "Workbench" mit dem man anscheinend Datenbanken und Tabellen erstellen kann(mit grafischer Oberfläche).
Könnt ihr mir sowas empfehlen?Also wäre es ok mit dieser Workbench die Datenbank zu erstellen oder macht man das eher nicht über dieses Programm?

-GhostfaceChilla-


----------



## Tobse (4. Nov 2013)

Ob du die Struktur jetzt per Oberfläche erstellst oder von Hand ist für die Datenbank total egal; die Oberfläche macht auch nix anderes als da Queries rausschicken. Dazu ist eine graphische oberfläche für sowas die Bequemlichkeit des Jahrtausends im Vergleich zum Tippen der Queries von Hand.

[EDIT]Ich bin es aber gewohnt, die strukturen mit phpMyAdmin zu erstellen; die Workbench kenne ich nicht aber wenn sie von MySQL selbst ist kann sie sooo schlecht eigentlich garnicht sein.[/EDIT]


----------



## Phash (5. Nov 2013)

die MySQL Workbench ist ziemlich ausgefeilt, und ich mag sie.

Der ERM Editor ist echt sehr brauchbar - man kann seine Datenbank komplett in der WorkBench designen, macht dann ein forward Engineering.
Geht ins Eclipse, nimmt die Hibernate Tools, macht ein backward engineering auf die Datenbank und hat alle Entitäten mitsamt Annotations im Code 


Da ich hier die Workbench nicht benutzen kann, schreib ich meine Entities jetzt wieder mit der Hand, lass Hibernate in die DB pushen, und nehme nach Abschluss meiner Entwicklungsarbeit die Datenbank um mir ein DDL zu erstellen, welches ich mit ausliefere


----------



## turtle (5. Nov 2013)

> Und gibts es sowas wie eine Entwicklungsumgebung?


Du bemerkst ja bereits selber, das DB mit einer IDE etwas ist, was genau aufgesetzt werden soll und verwendest Hibernate-Tools und kümmerst dich um Schema-Migration, Insbesondere spielen hier noch eine Menge anderer Dinge eine Rolle, als "nur" eine Java-IDE, ein DB-Schema, etc.

Häufig möchte man eine DB für ein Projekt entwickeln und deshalb müssen Dinge wie Migration der DB beachtet werden. Da ist das Aufsetzen eines Schemas mit Befüllen einer initialen Struktur nur EIN Schritt.  Die Unterstützung einer DB beim Kunden mit neuer Struktur ohne die Daten zu löschen ein anderer Schritt. Beispielsweise kümmert sich ein Tool wie Flyway um eine Unterstützung des Schemawechsels in einer DB. 

Daher halte ich das Zusammenklicken einer DB über Oberflächen für wenig hilfreich, weil DB-Design kompilizierter ist. Wenn du z.B. mit der 3. Normalform nichts anfangen kannst, mache dich da mal kundig.

Daher erstelle ich DB-Schemas immer per SQL (manuell) und befülle diese ebenfalls über SQL-Skripte. Deswegen "hasse" ich es auch, wenn Tools eine Datenbank generieren, denn meistens müssen ja Daten aus einer alten Version überleben.

Das ein Java-Entwickler oft an solche Dinge nicht so denkt, ist normal, aber eine DBA-Sichtweise auf ein DB-Projekt auch nicht falsch. Und da ist es halt oft so, dass ein DBA keine Hibernate-Kenntnisse und nichts von Java versteht.


----------



## Shandnyar (7. Nov 2013)

So nebenbei. Mann braucht nicht mehr 
	
	
	
	





```
Class.forName()
```
 zu benutzen


----------

