*Markus: Keine Verbindung mit JDBC zu Mysql

Hallo,

weder mit Spring, noch auf konventionellem Weg schaffe ich es, mit JDBC zu meiner lokalen MySQL-Datenbank eine Verbindung herzustellen. Ich habe schon verschiedene Treiberversionen benutzt o.ä. aber ohne Erfolg.
Hier der Testcode:

  
public class MysqlConnector  {  
  public static void main(String args[]){  
    try {  
      Statement stmt;  
      ResultSet rs;  
  
      //Register the JDBC driver for MySQL.  
      Class.forName("com.mysql.jdbc.Driver");  
      //Define URL of database server for  
      String url = "jdbc:mysql://localhost:3306/test";  
//      String url  
      Connection con = DriverManager.getConnection(url, "root", "testpwd");  
//    Connection con = DriverManager.getConnection(url);  
      //Display URL and connection information  
      System.out.println("URL: " + url);  
      System.out.println("Connection: " + con);  
  
      //Get a Statement object  
      stmt = con.createStatement();  
  
      rs = stmt.executeQuery("SELECT testfeld FROM Preis");  
      while (rs.next())   {  
       System.out.println(rs.getString(1));  
      }  
  
      con.close();  
    }catch( Exception e ) {  
      e.printStackTrace();  
    }  
  }  
}  

Hier die Fehlerausgabe:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

Last packet sent to the server was 0 ms ago.
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
 at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
 at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
 at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2103)
 at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718)
 at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
 at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
 at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302)
 at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282)
 at java.sql.DriverManager.getConnection(DriverManager.java:582)
 at java.sql.DriverManager.getConnection(DriverManager.java:185)
 at MysqlConnector.main(MysqlConnector.java:20)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

Last packet sent to the server was 0 ms ago.
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
 at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
 at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
 at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:666)
 at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1069)
 at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2031)
 ... 12 more
Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
 at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2431)
 at com.mysql.jdbc.MysqlIO.readPacket(MysqlIO.java:590)
 ... 14 more

Ihr seid meine letzte Hoffung. Ich habe gestern den ganzen Abend damit verbracht eine Lösung zu finden, nur dieses Problem haben offensichtlich viele, aber ich fand keine Lösungen dazu.

Eine Verbindung zu MySQL ist möglich:

markus@arch $ telnet localhost 3306
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

ODBC brauche ich nicht, da ich auf Linux arbeite, wie man sieht.

Markus

  1. Übrigens, der Treiber ist natürlich im CLASSPATH. (sogar im eigenen ext-Verzeichnis von Java)

    --

    1. Übrigens, der Treiber ist natürlich im CLASSPATH. (sogar im eigenen ext-Verzeichnis von Java)

      »»

      hallo,

      //Register the JDBC driver for MySQL.
      Class.forName("com.mysql.jdbc.Driver").newInstance();

      sollte es dann schon sein, denn ohne newInstance() hast du kein Objekt auf das du zugreifen kannst.

      siehe http://dev.mysql.com/doc/refman/5.1/de/connector-j.html

      mfg

      1. Hallo mysch.

        Class.forName("com.mysql.jdbc.Driver").newInstance();
        sollte es dann schon sein, denn ohne newInstance() hast du kein Objekt auf das du zugreifen kannst.

        Das brauchts nicht, siehe die Java-API : »A call to forName("X") causes the class named X to be initialized.«

        Servus,
        Flo

        1. Hallo,

          Das brauchts nicht

          Stimmt. Mir wurde auch empfohlen es nicht zu verwenden. Wie auch immer, es funktioniert mit Instanz auch nicht.

          Markus

  2. Hallo Markus,

    markus@arch $ telnet localhost 3306
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    Connection closed by foreign host.

    ODBC brauche ich nicht, da ich auf Linux arbeite, wie man sieht.

    woran sollte man das sehen?

    prompt vinzenz@work $$
    und telnet gibt es auch unter Windows :-)
    (Von MacOS, diversen BSD-Derivaten und sonstigen *ixen ganz zu schweigen)

    Freundliche Grüße

    Vinzenz