# Verständnisproblem - Datenbanken und Java



## DataFox (2. Januar 2008)

Hi Leute

ich hab dazu mal eine ganz allgemeine Frage. Wenn ich ein Programm schreibe, welches eine MySQL-Datenbank verwenden soll, wie gehe ich vor?

Die MySQL-Datenbank an sich ist ja nicht Bestandteil von Java, also muss ich sie irgendwie "anbinden". Ich verstehe es als ein externes Programm welches zusätzlich zu meinem Java-Programm auf dem Zielrechner verfügbar sein muss. Wenn ich mein Programm dann an Freunde schicken will, muss ich die MySQL-Datenbank mitschicken. 

Fragen:

1) Wo kriege ich so eine Datenbank her?
2) Wie binde ich die in mein Java-Programm so ein, das sie immer "mit dabei" ist?

Ich habe zwar ein dickes Java-Buch das sich mit JDBC befasst, darin wird aber kein Wort daran verschwendet zu erwähnen, wie das in der Praxis aussieht. Denn JDBC an sich ist ja keine Datenbank 

Freue mich über jeden Tipp! Allen ein frohes neues!!

Gruß
Laura


----------



## dto (2. Januar 2008)

Naja wenn du das so machst würde es vielleicht einwenig denn Sinn und Nutzen verfehlen.
Wenn es immernoch um dein Kochbuch geht was ich letztens mal gelesen habe wäre es besser du besorgst dir eine online DB, denn wie willst du sie aktualisieren und die Neueinträge aller zur Verfügung stellen wenn jeder eine eigene Datenbank nutzt.
Da kannst du die Daten auch anders ablegen.

Zum testen und Entwickeln kannst du dir MySQL kostenlos downloaden einfach googeln und installieren auch unter Linux kein Problem.

Aber für den effektiven Einsatzt wirst du wohl um eine online MySQL-DB nicht herrum kommen.

Vor einiger Zeit standen auch noch kostenlose zur Verfügung, musst nur drauf achten das sie auch von außen erreichbar sind.

Die Anbindung einer einer Datenbank unter Java ist sehr einfach ich kann dir gerne mal ein paar Praxisbeispiele zukommen lassen.


----------



## Wyatt (2. Januar 2008)

Hallo!

Es wäre nett, wenn du diese Praxisbeispiele hier posten könntest, ich interessiere mich ebenfalls für das Thema Java und Datenbanken! 

Gruß
Felix


----------



## DataFox (2. Januar 2008)

Diesmal geht es nicht um das Kochbuch 
Vielmehr will ich es einfach nur verstehen - für das Kochbuch wäre natürlich eine Online-DB sinnvoll...

Die Beispiele würden mich sehr interessieren. Kannst Du sie im Forum posten? Vielleicht als ZIP irgendwo hochladen... wäre klasse!

Gruß
Laura


----------



## tplanitz (2. Januar 2008)

Hallo,

@dontschew: Dein Angebot zu Beispielen mit Java und Datenbanken, an den Beispielen wäre ich auch interessiert wäre klasse wenn Du die hier zugreifbar machst!

@DataFox: Im Prinzip gibt es einen ganzen Haufen von Lektüre dazu, aus der Praxis weis ich das man einen sog. Aplication Server baut (Da steckt Dein Java Programm drinnen) und einen Datenbank Server (Da stecken die Nutzdaten drinnen), beides verbindest Du über JDBC. Ich habe noch ein Bild dazu gefunden das ganz einfach ist. Hilft Dir das ein bisschen?

@ALL: Mich würde interessieren wie man das (App-Server + DB-Server) in ein Paket baut um es dann zu verteilen, gibt es da ein Beispiel?

Grüße


----------



## DataFox (2. Januar 2008)

Hi

Danke für das Bild! Der "Application-Server" ist also keine Hardware in dem Sinne, sondern es ist einfach nur mein Java-Programm auf dem Client-Rechner? Und der Datenbankserver ist auch keine Hardware in dem Sinne, sondern einfach nur ein Programm das eine Datenbank darstellt?

Ich stells mir bildlich so vor:

- meine *.jar Datei, also mein Java-Programm
- irgend eine MySQLDatenbank.exe (die Datenbank), ggf. mit einem Unterordner der unzählige Files enthält
- das zusammengenommen ist dann mein ganzes Programm mit Datenbank

Und wenn man es verteilt, dann braucht man eine Installationsroutine welche die Datenbank auf dem Rechner installiert, damit das Java-Programm die Datenbank nutzen kann. Stimmts?

Gruß
Laura


----------



## Thomas Darimont (2. Januar 2008)

Hallo,

schau mal hier:
http://www.tutorials.de/forum/java/201081-die-beispiele-des-videoworkshops-zum-thema-jdbc.html

Gruß Tom


----------



## DataFox (3. Januar 2008)

Hi Tom,

danke für den Link! Wo finde ich denn den Workshop, um den es dort im Forum geht?

Besten Dank nochmal!

Gruß
Laura


----------



## Oliver Gierke (3. Januar 2008)

Das schöne an Java Programmen ist eigentlich, dass man meißtens nix installieren muss . Selbst wenn du die MySQL Installationsdateien mitlieferst installieren die auf dem Clientrechner einen Datenbankserver. Die Datenbank anlegen und mit initialen Daten befüllen müsste entweder ein Skript, oder du mit deinem Java Programm.

Wenn die Sache wirklich komplett auf dem Client laufen soll (also ohne Application Server usw.), wärds vielleicht sinnvoll die in Java 6 enthaltene Datenbank zu nehmen. Die kommt einfach mit der normalen Java Installation mit, so dass du kein weiteres artefakt liefern musst. Auch das Anlegen der DB kann implizit geschehen, nach dem Motto "create if not available". DIe Daten selbst liegen dann im Filesystem unterhalb deiner Anwendung. Sehr klein, portabel und auch gut performant. Und JDBC ist es ja so ziemlich egal, wohin das SQL schießt 

Gruß
Ollie


----------



## dto (3. Januar 2008)

Hab hier mal ein bischen was zusammengestellt wie man eine bestehende DB über java anspricht und nutzt.

Sammlung1.txt ist eigentlich ne html also .html anhängen
und auch nochmal als txt --> Sammlung2.txt

bei weiteren Fragen stehe ich euch gerne zur Verfügung.

Falls ich euch helfen konnte würde ich mich über ein positives Renommee freuen.


----------



## DataFox (6. Januar 2008)

Hi

danke für die Sammlungen! Man muss sich also erst so eine Klasse basteln, die mit der Datenbank kommunizieren kann?

Ok also auf meinem Rechner ist das so: Ich hab XAMPP installiert, also PHP mit MySQL. Was ich noch nicht checke ist, wie nun mein Java-Programm diese irgendwo auf meinem Rechner befindliche MySQL-DB ansprechen soll. Bzw. woher weis Java wo die DB liegt?

Gruß
Laura


----------



## Oliver Gierke (6. Januar 2008)

Das Zuaberwort heißt JDBC. Das ist die Api zum Ansprechen von Datenbanken. Diese soll es ermöglichen, Datenbanken möglichst unabhängig vom hersteller anzusprechen. Die Bindung an den Hersteller erfolgt dann über einen sogenannten Treiber, den du dir vom jeweiligen Hersteller runterladen kannst. Für MySQL zum Beispiel hier:

http://www.mysql.com/products/connector/j/

Wo die Datenbank liegt gibst du dann per sog. ConnectionString mit, z.B. so:

http://www.kitebird.com/articles/jdbc.html

Gruß
Ollie


----------



## DataFox (6. Januar 2008)

Hi Ollie

ich hab jetzt den mysql-connector-java-5.1.5 runter geladen und entpackt, und finde da eine viele verzeichnisse vor:


```
docs
src
	com
		mysql
			jdbc
				configs
				exceptions
				integration
				interceptors
				jdbc2
				log
				profiler
				trace
				util
				webapp
	doc
	lib
	org
	testsuite
```

und im root des Verzeichnisses die Files:


```
build.xml
CHANGES
COPYING
EXCEPTIONS-CONNECTOR-J
mysql-connector-java-5.1.5-bin.jar
README
README.txt
```

ähm... wo muss man den Treiber denn jetzt hin packen? muss ich die *mysql-connector-java-5.1.5-bin.jar* in Eclipse der JRE System Lib meines Projekts hinzufügen? Wie geht das?

Edit: Hab die mysql-connector-java-5.1.5-bin.jar nu unter c:\programme\java\jre1.6.0_01\lib\ext eingefügt, aber in Eclipse wird mir das Ding net angezeigt. *kopfkratz*....seltsam...hab ich da was übersehen?#

Gruß
Laura

*// EDIT*

Ich hab das hier gefunden: Datenbanken und ihre Treiber

aber ich werd einfach nicht schlau draus: 



> er Treiber liegt unter http://dev.mysql.com/downloads/connector/j/ bereit. Nach dem Entpacken muss das Jar-Archiv des Treibers in den Klassenpfad aufgenommen werden. Er unterstützt die JDBC-3.0-API.



Klassenpfad? 

Gruß
Laura


----------



## Oliver Gierke (6. Januar 2008)

Das Jar ist schon korrekt... du fügst das Ding unter Eclipse per Configure Build Path -> External Jars deinem Projekt hinzu.
Grundsätzlich ist es sinnvoll, solche 3. Anbieter Bibliotheken irgendwo an einen festen Ort auf deinen Rechner zu legen. Ich hab zum Beispiel einen Ordner Pool, in den kommt erstmal alles rein, ob Spring, Hibernate, MySQL Treiber whatever. Danach gehe ich in Eclipse her und lege mir User Libraries an. Mit denen kann man viele Jars zu einer Art Bibliothek zusammenfassen. Für MySQL also zum beispiel eine User Library mit dem Namen MySQL, und da hinein das Jar Pool/mysql-connector-irgendwas/mysql-connector-java-5.1.5-bin.jar. Gerade wenn eine Bibliothek (wie z.B. Spring) zur Ausführung noch weitere Bibliotheken benötigt (bei Spring z.B. commons-log) verliert man ohne User Libraries schnell den Überblick warum man welches Jar dem Projekt hinzugefügt hat.

Alternativ benutzt man ein Build bzw. Dependencymanagement tool wie maven, das das ganze dann unabhängig von der IDE löst. Für Kleinkram ist das Dependency Management von Eclipse aber durchaus ausreichend.

Zurück zum Thema . Wenn du den Treiber nun im Classpath hast sollte der Beispielcode von der Kiteseite eigentlich tun.

Gruß
Ollie


----------



## DataFox (6. Januar 2008)

danke  nu steht der Treiber bei mir unter "Referenced Libraries" direkt unter dem Knotenpunkt "JRE System Library"

jetzt muss ich nur noch ne verbindung zu meiner MySQL-DB hinkriegen die mit dem XAMPP installiert wurde. 

nochmal vielen Dank! bin gespannt obs nu klappt! Ach ja: Wozu sind denn all die anderen Dateien, die man mi dem Download des Treibers dazu bekommt?

Edit: *freu* es klappt! danke

Gruß
Laura


----------



## dto (6. Januar 2008)

Was für andere Datein der Treiber besteht norm. nur aus einem JAR file. Welches auch nicht entpackt werden muss.


----------



## DataFox (6. Januar 2008)

Hi

ich frag deshalb, weil in dem download-file von MySQL, also das Zip wo der Driver drin ist, 248 Dateien und 33 Ordner drin sind. Für irgendwas müssen die doch gut sein, bzw. wozu sind diese da wenn man nur dir JAR braucht? bissl verwirrend 

aber nu klappts auf jeden fall. Habs schon geschafft das mein Prog was in die DB schreibt!! Besten dank für eure Hilfe!

Gruß
Laura


----------



## Oliver Gierke (6. Januar 2008)

Die anderen Datein sind zum Beispiel das JavaDoc. Zum anderen halt die Sourcen um sich das Jar vielleicht selbst zu bauen. beispiel code usw.


Gruß
Ollie


----------



## DataFox (6. Januar 2008)

was passiert eigentlich wenn ich jemandem das programm schicke? also mal angenommen der hat wenigstens die mysql db, gleiche datenbank und gleicher username + passwort. muss ich dann auch die mysql treiber jar mitschicken

Gruß
Laura


----------



## Oliver Gierke (7. Januar 2008)

Jap... zur Ausführung braucht es immer dein Programm + alle 3. Bibliotheken.

Gruß
Ollie


----------



## DataFox (7. Januar 2008)

Alle 3?

da wären die Dateien:

- mein_programm.jar
- mysql_treiber.jar

was noch?

und muss man dann irgendwelche Pfade anpassen? Also ich schicke diese Dateien in einem ZIP-Archiv, und der andere packt es irgendwo aus - müssen die Dateien automatisch im gleichen Ordner liegen?

Gruß
Laura


----------



## dto (8. Januar 2008)

entweder muss der Treiber in <jre>/lib/ext liegen
oder in einem classpath(Systemverzeichnis)
oder auf der root obwohl ich es eigenlich nur so kenne das der Treiber in einem lib Verzeichnis auf der root liegt aber wenns auch so geht.


----------



## DataFox (8. Januar 2008)

Hi

mit root meinst Du das Verzeichnis wo mein_programm.jre liegt? also da lege ich dann einen unterordner "lib" an und in dem einen weiteren "ext"?

Gruß
Laura


----------



## Anime-Otaku (8. Januar 2008)

Wäre es nicht sinnvoller statt MySQL vielleicht Derby, SQLite oder HSQL mitzuschicken?

Da man diese im embedded Mode benutzen kann...also ohne extra eine Datenbank installieren zu müssen.


----------



## wsl (8. Januar 2008)

Oliver schrieb "3. Bibliotheken" und meinte damit nicht drei sondern dritt. Also alle Bibliotheken die dein Programm zusätzlich braucht.


Ja genau: einen Ordner lib in deinem Programmordner erstellen, dort die zusätzlich benötigten .jar reinkopieren und im Manifest deines Programms die .jar unter classpath eintragen.


----------



## Silent_Bob (27. Januar 2008)

Sers Leute,

is mir ein bisschen peinlich, aber was soll ich machen....ich hab so circa dasselbe Problem und steh grad total auf dem Schlauch.

Ich hab bei mir auf dem PC xampp drauf. Und ein Java-Programm, das einen Datenbankzugriff braucht. Da dachte ich mir, nehm ich gleich xampp, das hat ja auch eine mysql-datenbank.

Mir ist klar, wie ich innherhalb des Java-Programms auf die DB zugreife, was mir dagegen überhaupt nicht klar ist, welche Treiber in welchem Ordner sein müssen.

Sry, wenn das in dem Thread schon geklärt wurde, aber ich bin grad ziemlich frustriert, weil ich solche "Das File gehört dahin und das Ding musst du so und so konfigurieren"-Sachen ohnehin schon hasse. Besonders, wenn ich nicht weiß, was ich da genau machen muss.

Bitte daher um Hilfe und Nachsicht

Silent_Bob


----------



## The_Answer1985 (27. Januar 2008)

Hi,

hab ehrlich gesagt keine lust den ganzen Thread durchzulesen und zu schauen, ob die richtige Lösung da schon dabei war.
Außerdem geh ich mal davon aus, dass du mit Eclipse arbeitest (Wenn du das nicht tust, dann musst du eben den Thread doch durchlesen und die Lösung verwenden).

Lad dir den mySQL Connector runter --> google hilft dir weiter

Damit der Treiber auch immer verfügbar ist, solltest du ihn entweder an nen Ort auf der Festplatte kopieren, wo du ihn immer findest oder einfach in den Projektordner kopieren.

in Eclipse: wähle dein Projekt und geh auf "Project -> Properties"
dort wählst du "Java Build Path" und gehst dort auf den Reiter "Libraries"
über den Button "Add External JARs" kannst du den mySQL Connector auswählen.

Fertig.

MfG


----------



## Silent_Bob (27. Januar 2008)

Danke, passt soweit.

Eine Fragen hab ich noch:
Ich muss die URL der Datenbank angeben. Wenn ich bei xampp auf die Datenbankfunktionen zugreifen will, geh ich ja auf phpMyAdmin. Damit wäre dann die URL localhost/phpmyadmin. Wenn ich die URL angebe, kann ich aber nicht auf die Daten zugreifen.

Ich hab da z.B. in xampp eine Datebank namens bookshopzwei. Wenn ich bei der url

```
String url = "jdbc:mysql://localhost/phpmyadmin/bookshopzwei";
```
angebe, kommt eine "Incorrect database name"-Exception.
Wenn ich die url auf /phpmyadmin lasse und auf die Tabellen der DB bookshopzwei zugreifen will, gibts eine "Table phpmyadmin.buch doesn't exist"-Meldung.
Welche URL muss ich also angeben?


Danke im Voraus
Silent_Bob

[EDIT] Hat sich erledigt, hab nur bookshopzwei.buch schreiben müssen.


----------



## The_Answer1985 (27. Januar 2008)

Hi,

in dem Fall ist phpmyadmin ja nur ein Programm zur Erstellung und Verwaltung von DBs. Der Server in dem Fall bist du, also localhost.

Dass du die DB mit phpmyadmin erstellt hast, ist für Java aber unwichtig, wichtig in dem Fall ist nur der Server und der Name der DB.

Also in deinem Fall


```
localhost/datenbankname
```

Den Namen der betreffenden Tabelle gibst du hier aber am besten noch nicht an, sondern bei deinem SQL Stmt:


```
SELECT spalten FROM tabelle
```


MfG
alex


----------

