# MySQL ?!



## Tomate_Salat (2. Apr 2009)

Hi @ all,

seit Tage durchsuche ich Foren und Google und wenn ich denke ich habs, funktioniert es doch nie! Ist MySQL beim JDBC dabei oder muss ich das iwie einfügen? (Wenn ja: WIE?)
Und könnte mir ijemand ein beispiel schreiben wie ich auf eine MySQL zugreife die z.B. folgende Daten hat:

User:          foo
Passwort:    bar
host:          localhost
Datenbank:  testDatenbank

im vorraus schonmal danke 

MFG

Tomate_Salat


----------



## tfa (2. Apr 2009)

Nein, MySQL ist eine eigene Software, die du über die MySQL-Homepage herunterladen kannst und erst installieren musst. Einen JDBC-Treiber erhälst du dort auch.

Vielleicht fängst du erstmal mit einer in Java programmierten DB an, z.B. Derby. Das ist etwas weniger aufwendig. Ein Beispiel, wie man eine Derby-DB einbindet, findest du hier.


----------



## Tomate_Salat (2. Apr 2009)

Also muss ich die für Java nochmal extra runterladen, auch wenn ich die schon mit xampp verwende?

Eine andere DB zu wählen werde ich vllt mal ausprobieren nur fällt diese für mein aktuelles Projekt eher weg, denn ich schreibe an einer Website für meine Stufe und wollte ein Java-Programm schreiben, mit dem einfach News-Einträge an die Website senden und administrieren kann. Werde mir jetzt (zum 1000 mal^^) nochmal die MySQL seite anschauen


----------



## ARadauer (2. Apr 2009)

> seit Tage durchsuche ich Foren und Google und wenn ich denke ich habs, funktioniert es doch nie! Ist MySQL beim JDBC dabei


du beschäftigst dich tage mit mysql und jdbc und fragst ob mysql bei jdbc dabei ist? ist das dein ernst?
Java Database Connectivity ? Wikipedia lesen!
MySQL ? Wikipedia lesen!

ja lesen und nicht nur überfliegen!

jdbc ist nur die schnittstelle um mit java eine datenbank anzusprechen... das hat im grunde gar nix mit mysql zu tun, ich kann ja auch eine andere db ansprechen, warum soll das dann dabei sein?




> Und könnte mir ijemand ein beispiel schreiben wie ich auf eine MySQL zugreife die z.B. folgende Daten hat:
> [/qutoe]
> läuft auf localhost bereits eine datenbank?


----------



## tfa (2. Apr 2009)

Wenn du schon eine MySQL laufen hast, kannst du die natürlich benutzen. MySQL ist MySQL. Du brauchst halt nur den JDBC-Treiber.
MySQL :: Download Connector/J 5.1


----------



## ARadauer (2. Apr 2009)

Using JDBC with MySQL, Getting Started


----------



## Tomate_Salat (2. Apr 2009)

ARadauer hat gesagt.:


> läuft auf localhost bereits eine datenbank?



Ja da läuft die MySQL datenbank bereits, ty für die Links, werde mir die mal anschauen



tfa hat gesagt.:


> Wenn du schon eine MySQL laufen hast, kannst du die natürlich benutzen. MySQL ist MySQL. Du brauchst halt nur den JDBC-Treiber.
> MySQL :: Download Connector/J 5.1



Den habe ich schon längst runtergeladen, weis nur nicht recht wie ich den benutzen soll


----------



## ARadauer (2. Apr 2009)

arbeitest du mit eclipse, weißt du wie du eine jar einbinden kannst?
dann mach das mal...

treiber laden
verbindung herstellen
statement absetzen
resultset auslesen
verbindung schließen...
da gibts tausende tutorials im netz....

poste mal deinen code..

http://www.java-forum.org/java-faq-beitraege/1351-datenbank-verbindung-zu-mysql.html


----------



## Tomate_Salat (2. Apr 2009)

ja ich arbeite mit Eclipse...mit dem JAR-EINBINDEN hab ich so meine probleme, und deswegen auch leider keinen code


----------



## ARadauer (2. Apr 2009)

ok in deinem projekt erstellst du dir ein verzeichnis libs (neben src und bin)
in eclipse, rechte maustaste aufs projekt -> Properties
Java Build Path  -> Reiter Libraries - > Add Jars

Jar auswählen.. fertig


----------



## Tomate_Salat (2. Apr 2009)

ah ok, danke, wofür brauch ich den libs ordner?

ok, jz hat er den Treiber. Werde es jz mal versuchen das ganze iwie zu verwenden^^. Danke schonmal, habt mir bis jetzt sehr weiter geholfen 


-- EDIT --
Ok, habs mittels Inet-Tutorial gelöst:


```
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Connection;

public class Init {
    
    static Connection con = null;
    static Statement stmt = null;
    static ResultSet rs   = null;
    
    public static void main(String args[]){
        try {
            Class.forName( "com.mysql.jdbc.Driver" );
          }
          catch ( ClassNotFoundException e ) {
            e.printStackTrace();
            System.exit(1);
          }

          try{
            con = DriverManager.getConnection("jdbc:mysql://localhost/msg-2010","<user>","<passwort>" );

            stmt = con.createStatement();

            rs = stmt.executeQuery("SELECT * FROM news");

            while ( rs.next() ){
              System.out.println("ID:       "+rs.getString(1));
              System.out.println("Titel:    "+rs.getString(2));
              System.out.println("Inhalt:   "+rs.getString(3));
            }

            rs.close();
            stmt.close();
            con.close();
          } catch ( Exception e ){
           e.printStackTrace();
            System.exit(1);
       }   
    }
}
```


----------



## faetzminator (5. Apr 2009)

Tomate_Salat hat gesagt.:


> ah ok, danke, wofür brauch ich den libs ordner?


Damit auch alles schön im Projekt drin ist --> und dass der Source in src, die Binaries/Classes in bin, die Jars/Libs in libs gehören ist einfach Standard...


----------



## Tomate_Salat (7. Apr 2009)

die speichern sich aber bei mir nicht in den libs ordner


----------



## ARadauer (7. Apr 2009)

Tomate_Salat hat gesagt.:


> die speichern sich aber bei mir nicht in den libs ordner



src //deine quelldatein
bin //compelierten class files
libs //externe bibliotheken

kann man natürlich auch ganz anders machen, bzw auch systeme wie maven verwenden
aber für anfang ist das so an einfachsten...

wo liegt deine mysql connector jar?


----------



## Matt (7. Apr 2009)

Ich mag hier mal nen kleines Beispiel erstellen, wie das mit einer mySQL DB aussehen kann.
Dafür hab ich mal eben zwei Bilder erstellt. Ich entschuldige mich für die größe ^^, hoffe niemand gimpt mit nem Modem rum und fühlt sich genervt wegen den Bildern...

So dele, wie schon vorangegangene Personen erwähnt brauch man einige voraussetzungen, um via Java auf eine MySQL Datenbank zu zugreifen ^^. Bis vorkurzem hatte ich auch nicht soviel Plan davon, bis ich mir mal wirklich Zeit genommen hab, mich damit aktiv zu beschäftigen und auch mir persönlich Klassen etc. als Vorlage für andere Projekte zu erstellen.

Am ende des Posts werde ich auch auch zwei Links anhängen, wo man eine ältere Version meiner Datenbanken Klassen findet. ^^

Zu den Vorrausetzung, Ihr benötigt folgendes:


Eclipse oder eine andere Umgebung (Hier präsentiere ich jedoch mit Eclipse: Sun Deutschland > Startseite)
den JDBC Treiber von MySQL (MySQL :: MySQL Downloads)
Einen MySQL-Server mit Datenbank xD (Xampp hat eine gaaanz tolle ^^)
und ganz klar einbissl Syntax *rofl* (Die kriegt ihr aus eurem Hirn oder von irgendwelchen Personen ausm INET die meinen Sie wären die größten ^^)
So denn gehen wir davon aus, das ihr es geschafft habt Xampp zu installieren und auch Eclipse zu entpacken xD und sogar mit mühe und not den JDBC von MySQL zu downloaden, dann seid ihr schon verdammt weit gekommen!! Andere haben nicht die nerven für solch komplexe vorgänge!
Gehen wir nun auch davon aus, das Ihr es geschafft habt eine Datenbank anzulegen. Denn mit Hilfe von phpmyAdmin (in jedem Xampp dabei soweit ich weiss) ist das ja wohl kein großes ding. Gehen wir weiter. Ihr habt die Datenbank nun, Sie heisst *MeineDatenbank*. So nun braucht ihr natürlich auch noch Tabellen mit kleinen Beispiel Datensätzen. Wir erstellen einfach eine Tabelle User mit 2 Spalten und tragen Beispiel Datensätze ein.

So kümmern wir uns um den JDBC Treiber von MySQL  (der mysql-connector-java-5.1.7 sollte der aktuelle sein)

Wenn wir das runtergeladene Archiv entpacken finden wir folgendes:


Verzeichnis - src
Verzeichnis - docs
mysql-connector-java-5.1.7-bin.jar
und einige andere Dateien die für uns momentan sehr sehr unwichtig sind...
Mir sind nun 3 Wege bekannt, was wir so effektives mit diesen Dingen tun können...



Wir nehmen aus dem src-Verzechnis die Verzeichnisse com und org und kopieren sie in unser src Verzeichnis vom Projekt ^^.
Wir erstellen in unserem Projektverzeichnis ein Unterverzeichnis mit der bezeichnung libs und kopieren die mysql-connector-java-5.1.7-bin.jar da rein.
Wir kopieren die mysql-connector-java-5.1.7-bin.jar in das Verzeichnis ./jre/libs/ext und erweitern unser Java um das Archiv - hab nie gemacht - glaub ein Eintrag ins Classpath muss stattfinden ^^
Hier ein Bild um das mal anschaulich zu machen  (die Fälle beziehen sich auf die Situation wie oben beschrieben)






Ich bevorzuge den zweiten Fall und werde daher auch auf diesen weiter eingehen .

Also wir haben die mysql-connector-java-5.1.7-bin.jar in das libs Verzeichnis unseres Projekts kopiert, damit ist diese aber noch nicht gänzlich in unser Projekt eingebunden.

Wir müssen unserem Projekt noch sagen, das dieses Jar existiert und er darauf zugreifen kann, sofern es nötig ist. Daher öffnen wir nun unser Eclipse und unser Projekt (wenn ein Projekt noch nicht existiert kann man keinen libs ordner erstellen, weil der Projektordner noch net existiert >_> ausser man ist ein Gimp und bastelt sich einen per Hand). Wir machen nun ein Rechtsklick auf unser Projekt, welches im Projekt-Explorer nun dargestellt wird und wählen Properties aus. Es öffnet sich ein Fenster und schon geht die Jagd nach dem Archiv los!!

Was nun kommt werde ich anhand eines Bildes verdeutlichen:





Wir erkennen gut das unter dem Punkt "Java Build Path", den Panelreiter Libaries auswählen müssen. Darauffolgend klicken wir auf "Add JARs" und ein kleines Fenster öffnet sich mal wieder. Dort sollten wir nun alle Archive entdecken, die sich in unserem "libs"-Verzeichnis befinden (egal ob .jar oder .zip ;D).

Ausgewählt und mit OK bestätigt sehen wir unser Ergebnis und es ist zufriedenstellend.

Alles weitere ist Code ^^.

Wie könnte so ein Code aussehen?

Ales erstes vllt wichtige Libs importieren als erstes:
[highlight="Java"]import java.io.*;
import java.sql.*; [/highlight]
Perfekt!
Und nun unseren Treiber, den müssen doch irgendwie benutzen!

[highlight="Java"]
treiber = "org.gjt.mm.mysql.Driver" ;
Class.forName( treiber ).newInstance();[/highlight]
Sieht doch gut aus!
Was noch? Achja die eigentliche Datenbank verbindung! Wie kann sowas aussehen?

[highlight="Java"]
String temp = "jdbc:mysql://"+dburl+"/"+dbname;
conn = DriverManager.getConnection(temp, usrname, password);[/highlight]
Hier zu beachten das die dburl und der dbname variablen sind (für jene die noch blutige anfänger sind), ebenso usrname und password. Diese sind in der regel immer Notwendig für den Zugriff auf mySQL-Servern .

Nun denn, wir haben schon ein ergebnis! Die Verbindungsinformationen sind in unserer Variable conn gespeichert! (Anmerkung: conn ist eine Variable von Datentyp Connection ;D)

[highlight="Java"]
Connection conn;[/highlight]


Aber nun muss es doch weiter gehen Oo oder etwa nicht? Na klar!!! Wir wollen dich eine Datenbank auslesen bzw. in sie rein schreiben! Doch wie kann man sowas machen???

Ganz einfach!
[highlight="Java"]public ResultSet getQuery(String sqlquery) throws SQLException{
        Statement  st = conn.createStatement();
        ResultSet rs = st.executeQuery( sqlquery );
        return rs;
    }[/highlight]

Eine typische public Methode , welches ein ResultSet zurückliefert  sofern es auch ein akzeptables Statement erhält.

Doch was tun mit dem ResultSet, wenn man es erstmal hat?

Beispiel wir haben einen Select-Befehlt benutzt (SQL sollte man jezz schon kennen >_<), so können wir das ResultSet wir ein Objekt benutzen ^^. Beispiel wir haben eine User Tabelle usr. Dann läuft das ganze so ;D

[highlight="Java"]ResultSet rs = getQuery("select * from usr;");
while(rs.next()){
                String bla = (rs.getString("name"));
                System.out.println(bla);
        }[/highlight]
Was tun wir? Wir entnehmen unserer Tabelle die Spalte "name" und geben Zeile für Zeile den Inhalt aus ! 

So leicht kann das sein. Ich hoffe es war anschaulich genug hat mich immerhin ingesamt 1stunde gekostet xD andere würden dafür money ohne ende verlieren!!!

MfG
Matt

edit: total die Beispiele vergessen Oo 
hier sind die Links:


Erster Fall: http://mrwn.de/mrwn/examples/DB-Klasse/DB-Klasse.rar
Zweiter Fall: http://mrwn.de/mrwn/examples/DB-Klasse/DB-Klasse Kopie.rar


----------



## Tomate_Salat (12. Apr 2009)

OMG, gute Arbeit, aber ich hatte es dann doch vorher schon kapiert gehabt. Eigentl. könntest du daraus einen eigenen Thread mit [tut] vorm Titel erstellen 

Trotzdem vielen Dank für die Mühe, ich weis es zu schätzen


----------



## Matt (15. Apr 2009)

Tomate_Salat hat gesagt.:


> OMG, gute Arbeit, aber ich hatte es dann doch vorher schon kapiert gehabt. Eigentl. könntest du daraus einen eigenen Thread mit [tut] vorm Titel erstellen
> 
> Trotzdem vielen Dank für die Mühe, ich weis es zu schätzen



^^ naja wusste net das du schön gelöst hast xD war wohl etwas blind in dem moment...und was die Idee mit dem Thread angeht - kA ob ich des hier einfach reinknallen kann ^^ vllt sollte ich nochma die foren regeln studieren...

Und naja np xD

Matt


----------



## Ebenius (15. Apr 2009)

Matt-Softwareschmiede hat gesagt.:


> ^^ naja wusste net das du schön gelöst hast xD war wohl etwas blind in dem moment...und was die Idee mit dem Thread angeht - kA ob ich des hier einfach reinknallen kann ^^ vllt sollte ich nochma die foren regeln studieren...


Hab mir den Beitrag jetzt nicht genau angesehen. Eröffne doch ein Thema im Entwürfe-Ordner des FAQ-Unterforums... Entwürfe - java-forum.org

Ebenius


----------



## maki (15. Apr 2009)

2 Anmerkungen:


> 1. Wir nehmen aus dem src-Verzechnis die Verzeichnisse com und org und kopieren sie in unser src Verzeichnis vom Projekt ^^.
> 2. Wir erstellen in unserem Projektverzeichnis ein Unterverzeichnis mit der bezeichnung libs und kopieren die mysql-connector-java-5.1.7-bin.jar da rein.
> 3. Wir kopieren die mysql-connector-java-5.1.7-bin.jar in das Verzeichnis ./jre/libs/ext und erweitern unser Java um das Archiv - hab nie gemacht - glaub ein Eintrag ins Classpath muss stattfinden ^^


1. & 3. sind nicht zu empfehlen, oder besser: Kann man nur von abraten.

"org.gjt.mm.mysql.Driver" ist uralt und sollte nicht mehr verwendet werden, stattdessen nimmt man "com.mysql.jdbc.Driver" .


----------



## Matt (15. Apr 2009)

maki hat gesagt.:


> 2 Anmerkungen:
> 
> 1. & 3. sind nicht zu empfehlen, oder besser: Kann man nur von abraten.
> 
> "org.gjt.mm.mysql.Driver" ist uralt und sollte nicht mehr verwendet werden, stattdessen nimmt man "com.mysql.jdbc.Driver" .



Also da will ich dir nicht widersprechen ^^ ich bin auch ein freund der zweiten methode.

Was den Treiber angeht, will ich dir auch nicht widersprechen ^^ ich hab die zeilen aus meiner alten DB-Klasse einfach rauskopiert und da stand tatsächlich noch "org.gjt.mm.mysql.Driver"



Ebenius hat gesagt.:


> Hab mir den Beitrag jetzt nicht genau angesehen. Eröffne doch ein Thema im Entwürfe-Ordner des FAQ-Unterforums... Entwürfe - java-forum.org



Danke für den Tipp werd ich mir gleich mal anschauen ^^


----------



## maki (15. Apr 2009)

Hoffe du verstehst meine Kritik nicht falsch, ist nicht böse gemeint 

Persönlich bion ich ein großer Freund von deiner Idee da einen FAQ Eintrag draus zu machen, haben diese Frage hier leider viel zu oft


----------



## Matt (15. Apr 2009)

maki hat gesagt.:


> Hoffe du verstehst meine Kritik nicht falsch, ist nicht böse gemeint
> 
> Persönlich bion ich ein großer Freund von deiner Idee da einen FAQ Eintrag draus zu machen, haben diese Frage hier leider viel zu oft




Also ich denke nicht das ich sie falsch verstehe und ich fand sie absolut sachlich.

Was den FAQ eintrag angeht  siehst ja selbst bin dabei. Und ja war auch so geplant das ich mal ne art vorlage auch für andere erstelle auch wenn der Eintrag direkt ins FAQ bzw. die Idee bis vorhin nicht in den Sinn kam ^^


----------

