# JDBC mit MySQL



## Hannes23 (2. Feb 2005)

Hallo,

ich versuche mit folgendem Code auf eine MySQL-Datenbank zuzugreifen:


```
import java.sql.*;

public class JdbcMysqlDemo01 {
    public static void main( String[] args ) {
       
        String host = "localhost";
        String port = "3306";
        String dbType = "mysql";
        String dbName = "test";
        String dbUser = "hannes";
        String dbPwd = "xxx";

        // Mit der folgenden Anweisung
        // geben wir die JDBC-Treiber f�r Oracle und
        // Mysql an, die je nach Vorhandensein
        // geladen werden.
        // (Dies kann man nat�rlich auch �ber
        // die Kommandozeile mit dem "-D"-Schalter
        // und dem Property "jdbc.drivers" tun).
        String myDrivers =
            "com.mysql.jdbc.Driver";

        System.setProperty(
            "jdbc.drivers",
            myDrivers
        );

        
  
        // Mysql
        try {
            Class.forName(
                "com.mysql.jdbc.Driver"
            );
        } catch ( Exception ex ) {
	    System.out.println("TREIBER NICHT GEFUNDEN!!!");
            System.err.print( ex );
            System.exit( 1 );
        }


        //Verbindung zur DB aufbauen
        Connection conn = null;

        String uri = "jdbc:" + dbType + "://" +
            host + ":" + port + "/" +
            dbName;
        try {
            conn = DriverManager.getConnection(
                uri,
                dbUser,
                dbPwd
            );
            System.out.println( "OK" );
        } catch ( Exception ex ) {
            System.err.print( ex );
            System.exit( 1 );
        } finally {
            if ( conn != null ) {
                try {
                    conn.close();
                } catch ( Exception ign ) {}
            }
        }

        System.exit( 0 );
    }
}
```


Der Programmaufruf:
java -cp .:mysql-connector-java-3.0.14-production-bin.jar JdbcMysqlDemo01

Ich bekomme folgende Fehlermeldung:
Exception in thread "main" java.lang.NoClassDefFoundError: JdbcMysqlDemo01


...und hätte noch eine allgemeine Frage zum mysql-connector:
-Muss ich den bei jedem Programmaufruf angeben?
-Gibt es irgendein Verzeichnis, an das er standartmäßig kopiert wird?


Danke,

Hannes

-----------------------------------------------------------
Umgebung:
Linux SuSE 9.2
MySQL 4.0.21


----------



## EagleEye (2. Feb 2005)

nim mal den java -cp mysql-connector-java-3.0.14-production-bin.jar;. JdbcMysqlDemo01
ja mußt ihn jedes mal angeben seiden du entpackst ihn und machst alles als jar und packst ihn mit darein

was meinst du mit dem kopieren


----------



## foobar (2. Feb 2005)

> -Muss ich den bei jedem Programmaufruf angeben?


Nein, du kannst den Treiber auch im Class-Path-Attribut im Manifest deines Jars angeben. 
Benutz mal die Suche.


----------



## Bleiglanz (2. Feb 2005)

Linux

-cp .:/pfad/zur/jar/mysql-connector-java-3.0.14-production-bin.jar Klasse

Windows

-cp .;C:\schmu\schmaeh\mysql-connector-java-3.0.14-production-bin.jar Klasse

du musst java natürlich in dem Ordner aufrufen, in dem die DateiJdbcMysqlDemo01.class liegt



und: gib den cp bei jedem Aufruf an, schreib dir ggf. eine batch/shell datei oder ein ant-skript


----------



## Hannes23 (2. Feb 2005)

Mhmm...danke. Und weiß noch jemand woran die Fehlermeldung liegen könnte??


@EagleEye:
Mit kopieren meinte ich, ob es ein bestimmtes Verzeichnis gibt, in dem die *.jar Datei rein muss und von dort aus standartmäßig aufgerufen wird....aber hat sich dann eh erledigt.

Danke, Hannes


----------



## Bleiglanz (2. Feb 2005)

Exception in thread "main" java.lang.NoClassDefFoundError: JdbcMysqlDemo01 


heisst:

JdbcMysqlDemo01.class 

liegt in keinem Ordner der im Classpath aufgeführt ist


----------



## Hannes23 (2. Feb 2005)

...und wie kann ich unter Linux angeben, welcher Ordner im Classpath aufgeführt ist?

Hab hald jetzt einfach einen Ordner java, in dem meine Programme drinliegen...denn sollte ich dann ja wohl im  Classpath angeben?


----------



## Bleiglanz (2. Feb 2005)

Wenn du IM ordner java den befehl

java -cp .:/pfad/zur/jar/mysql-connector-java-3.0.14-production-bin.jar JdbcMysqlDemo01 

eingibtst dann solls gehen

der cp besteht aus zwei ordnern (dem jar und dem ., wobei der . wie üblich der "momentane" ordner ist)


----------



## Hannes23 (2. Feb 2005)

Nuja, ich hab die *.jar im gleichen Verzeichnis, wie meine *.class deshalb auch mein Aufruf:

java -cp .:mysql-connector-java-3.0.14-production-bin.jar JdbcMysqlDemo01

Müsste auch stimmen (Tab-Vervollständigung benutzt)...


----------



## EagleEye (2. Feb 2005)

wenn mich nix täuscht schreibst du laufend : statt ; und meiner meinung heißt das ; (aber ich kann mich auch täuschen )


----------



## Hannes23 (2. Feb 2005)

Nein, das ".:" müsste schon stimmen...


----------



## Hannes23 (2. Feb 2005)

Ich glaub echt, dass es irgendein Treiber - Problem ist...

Ich hab mir grad nochmal den mysql-connector runtergeladen und mir ist aufgefallen, dass ich aus dieser tar.gz - Datei damals nur die mysql-connector-java[...].jar verwertet hab. Hätte man mit den anderen Dateien noch irgendwas machen müssen???
(ein Ordner "clover" ist z.B. noch dabei...)


----------



## foobar (3. Feb 2005)

> Hätte man mit den anderen Dateien noch irgendwas machen müssen???


Nein, du brauchst nur den Connector.

Lass dir mal mit jar tf mysql-connector.jar den Inhalt anzeigen, dann siehst du ob irgendwas fehlt.


----------



## Bleiglanz (3. Feb 2005)

Exception in thread "main" java.lang.NoClassDefFoundError: JdbcMysqlDemo01 

das hat überhaupt nix mit dem treiber zu tun, weil dein Prog noch nicht einmal gestartet ist (sofern wir überhaupt noch über obige Fehlermeldung reden)

=> die ClassNotFound für den DBTreiber kann also noch gar nicht erreicht werden! 

schau mal ob du mit

     java JdbcMysqlDemo01 

wenigstens dein Prog starten kannst


----------



## Hannes23 (3. Feb 2005)

@Bleiglanz:

Wenn ich das Programm nur über java JdbcMysqlDemo01 aufrufe erhalte ich:

TREIBER NICHT GEFUNDEN!!!
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

...aber das sieht dann wohl so aus, als würde das Programm gestartete werden, weil ich die Fehlermeldung "TREIBER NICHT GEFUNDEN" ja vom Programm ausgeben lasse...


----------



## Bleiglanz (3. Feb 2005)

Hannes23 hat gesagt.:
			
		

> @Bleiglanz:
> 
> Wenn ich das Programm nur über java JdbcMysqlDemo01 aufrufe erhalte ich:
> 
> ...


dann muss

```
java -cp .:mysql-connector-java-3.0.14-production-bin.jar JdbcMysqlDemo01
```
auch gehen, wenn

mysql-connector-java-3.0.14-production-bin.jar

im gleichen Ordner liegt, also direkt neben

JdbcMysqlDemo01.class


----------



## Hannes23 (5. Feb 2005)

Mhmmm....geht aber nicht 

mysql-connector-java-3.0.14-production-bin.jar liegt im gleichen Ordner wie JdbcMysqlDemo01.class

...hab ich im Programm vielleicht einen anderen Treiber angegeben als ich dann im Endeffekt lade??

...und sind denn die anderen Dateien, die noch mit mysql-connector-java-3.0.14-production-bin.jar in dem tar.gz - File stecken wirklich völlig nutzlos??

Bin langsam echt am Verzweifeln *g*

Danke, Hannes


----------

