# keine Verbindung zu mysql Datenbank



## Kirk (10. Feb 2006)

hallo !

habe mysql datenbank auf ubuntu laufen und möchte mich mit mysql jdbc Driver zur Datenbank verbinden 
Der Treiber lässt sich im Program auch laden - jedoch gibt es beim Versuch eine Connection mit der Datenbank 
aufzubauen folgende fehler: 

Exception in thread "main" java.lang.NoClassDefFoundError: while resolving class: Test
   at java.lang.VMClassLoader.transformException(java.lang.Class, java.lang.Throwable) (/usr/lib/libgcj.so.6.0.0)
   at java.lang.VMClassLoader.resolveClass(java.lang.Class) (/usr/lib/libgcj.so.6.0.0)
   at java.lang.Class.initializeClass() (/usr/lib/libgcj.so.6.0.0)
   at java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader) (/usr/lib/libgcj.so.6.0.0)
   at gnu.java.lang.MainThread.run() (/usr/lib/libgcj.so.6.0.0)
Caused by: java.lang.ClassNotFoundException: java.lang.StringBuilder not found in gnu.gcj.runtime.SystemClassLoader{urls=[file:/usr/lib/j2sdk1.5-sun/bin/,file:./,file:/usr/lib/j2sdk1.5-sun/jre/lib/ext/mysql-connector-java-3.1.12-bin.jar,file:./], parent=gnu.gcj.runtime.ExtensionClassLoader{urls=[], parent=null}}
   at java.net.URLClassLoader.findClass(java.lang.String) (/usr/lib/libgcj.so.6.0.0)
   at java.lang.ClassLoader.loadClass(java.lang.String, boolean) (/usr/lib/libgcj.so.6.0.0)   at java.lang.ClassLoader.loadClass(java.lang.String) (/usr/lib/libgcj.so.6.0.0)
   at java.lang.Class.forName(java.lang.String, boolean, java.lang.ClassLoader) (/usr/lib/libgcj.so.6.0.0)
   ...4 more


Warum findet er diese Klassen nicht CLASSPATH muss ja richtig gestzt sein sonst könnt er den Treiber auch nicht laden oder? Danke für die Hilfe!

-------------------------------------Code--------------------------------------------------------
import java.sql.*;
import java.io.*;

public class Test{

public static void main(String[] argv){
);

   String sDbDrv=null, sDbUrl=null, sTable=null, sUsr="", sPwd="";

    String treiber=null, DbUrl=null ; 


    treiber = "com.mysql.jdbc.Driver"; 
    DbUrl = "jdbc:mysql://localhost:3306/test_db" ;

 try { 
	    System.out.println("* Treiber laden"); 
      	    Class.forName(treiber).newInstance(); 
System.out.println(Class.forName(treiber)); 
System.out.println(Class.forName(treiber).newInstance()); 
        } 
        catch (Exception e) { 
            System.err.println("Unable to load driver."); 
            e.printStackTrace(); 
        } 

 try { 
	    System.out.println("* Verbindung aufbauen"); 
	    Connection conn = DriverManager.getConnection( DbUrl, "root", "geheim" ); 

	    System.out.println(conn); 
	    conn.close(); 
        } 
        catch (SQLException sqle) { 
            System.out.println("SQLException: " + sqle.getMessage()); 
            System.out.println("SQLState: " + sqle.getSQLState()); 
            System.out.println("VendorError: " + sqle.getErrorCode()); 
            sqle.printStackTrace(); 
        } 
}
----------------------------------------------------------------------------------------------------------------------------------------

}


----------



## Bleiglanz (10. Feb 2006)

Tipp: installier dir lieber das original SDK von Sun, mit der GCJ wirst du mittelfristig keine Freude haben...


----------



## kirk (10. Feb 2006)

hab das original auch schon drauf - wie kann man eigentlich zwischen den beiden hin und her wechseln? 

glaubst du auch dass dies der Grund für mein Problem ist?


----------



## Bleiglanz (10. Feb 2006)

vermutlich

schau mal deinen PATH an

echo $PATH

da drin steht wahrscheinlich noch das "alte"

und mach z.B. in .bashrc ein 

PATH=${PATH}:derpfadzumOriginalJDK/bin


----------



## kirk (10. Feb 2006)

hm stimmt in PATH war nicht der richtige Pfad eingetragen - in Pfad gab es mehrere einträge nach aufruf von echo $PATH

/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11:/usr/g ames

hab jetzt den richtigen Pfad dazu gefügt - sieht dann so aus:
/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11:/usr/g ames:/usr/lib/j2sdk1.5-sun/bin

Frag ich jedoch mit java -version die Version ab so ist es noch immer gcj??


----------



## Bleiglanz (10. Feb 2006)

na ja, der "alte" ist "vorher" im Path, setzt das jdk an den anfang


----------



## Kirk (10. Feb 2006)

Danke das hat jetzt funktioniert - allerdings steh ich gleich vor dem nächsten Problem nämlich diesem

java.sql.SQLException: null,  message from server: "Host 'localhost.localdomain' is not allowed to connect to this MySQL server"

hab auf der mysql seite (http://dev.mysql.com/doc/refman/5.0/en/access-denied.html)
gelesen das dies ein problem für unix benutzer sein kann wenn man eine binary mysql version verwendet die mit einer unterschiedlichen  version der glibc library kompiliert ist als die die verwendet wird.

es wird vorgeschlagen entweder glibc ubzugraden oder eine source distribution von mysql selbst zu kompilieren. 

Ich hab jetzt auch ein paarmal gelesen das es umständlich ist die glibc upzugraden. deshalb werden ich versuchen mysql selbst zu kompilieren. Weis jemand ob die Daten die in meiner jetzigen Mysql vorhanden sind, dann auch gleich wieder in der neu kompilierten verfügbar sind oder nicht. Was muss ich sonst noch beachten?


----------



## Bleiglanz (10. Feb 2006)

trag einfach localhost in deiner /etc/hosts ein als name für 127.0.0.1

wenn du den User mit GRANT ...TO sepp@localhost eingetragen hast und der Name aber dann localhost.localdomain ist, dann gehts nicht


----------



## Gast (10. Feb 2006)

hm also in meiner /etc/hosts steht in der ersten zeile

127.0.0.1	localhost.localdomain	localhost	ubuntu

wenn ich 127.0.0.1 durch localhost ersetze kommt folgende Fehlermeldung: 

SQLException: Communications link failure due to underlying exception:

** BEGIN NESTED EXCEPTION **

java.net.UnknownHostException
MESSAGE: localhost: localhost

STACKTRACE:

java.net.UnknownHostException: localhost: localhost
.......


in der mysql Datenbank hat der user Test alle Recht und er steht in der Tabelle User in der MYSQL DB. In der Tabelle User steht bei ihm bei Host localhost - bei User Test das Password steht dort allerdings verschlüsselt drin. über java versuch ich dann mittels 
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/Test_db?user=Test&password=geheim");

zu verbinden. doch allerdings ohne erfolg


----------



## Bleiglanz (10. Feb 2006)

da soll drinstehen

127.0.0.1 localhost localhost.localdomain ubuntu 

also localhost als ERSTES!


----------



## kirk (10. Feb 2006)

ah danke jetzt funktionierts


----------



## Guest (1. Mrz 2006)

Hi, ich hab das selbe Problem wie oben beschrieben beim Verbinden zum MySql Server. In meiner Eclipse Testumgebung in nem Appletviewer klappt es dank der FAQ mittlerweile (danke für den tipp der da steht *g*), aber wenn ich mein Applet im IE laden will kommt dieser Fehler:


```
java.lang.ExceptionInInitializerError
	at com.mysql.jdbc.Connection.<init>(Connection.java:1175)
	at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:266)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at Mysql.connect(Mysql.java:42)
	at Spiel.init(Spiel.java:39)
	at sun.applet.AppletPanel.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.RuntimeException: Unable to initialize character set mapping tables
	at com.mysql.jdbc.CharsetMapping.<clinit>(CharsetMapping.java:73)
	... 8 more
Exception in thread "thread applet-Spiel.class" java.lang.NullPointerException
	at sun.plugin.util.GrayBoxPainter.showLoadingError(Unknown Source)
	at sun.plugin.AppletViewer.showAppletException(Unknown Source)
	at sun.applet.AppletPanel.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
```

meine PATH Variable lautet wie folgt:

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Programme\MySQL\MySQL Server 5.0\bin;C:\Programme\PHP

kann mir jemand weiterhelfen?


----------

