# Fehler bei getConnection zu MySQL Datenbank



## herf (18. Aug 2019)

Hallo zusammen, ich bin hier neu.
Ich habe meinen PC auf Windows10 upgedated und auch die neuesten Versionen von MySQL (8.0.17), JDK (1.8. 0_221) und Netbeans (11.0) installiert. Die Datenbank läuft, ich kann mit LibreOffice über ODBC darauf zugreifen.  Beim Verbindungsaufbau mit JAVA (mysqlconnector 8.0.17) kommt ein Fehler.

Das ist mein Code , der unter Windows 7, MySQL 5, JDK 1.7.0_7 funktioniert hat:


```
public static void start() {

        String dbname = "jdbc:mysql://127.0.0.1:3306/dia?useUnicode=yes&characterEncoding=UTF-8";
        String user = "xxxxxxxx";
        String pw = "yyyyyyyy";
        try {                                              // Treiber laden
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            System.err.println(" Kann Treiber nicht laden: " + e);
        }
        try {
            conDia = DriverManager.getConnection(dbname, user, pw);
        } catch (SQLException e) {
             System.err.println("DB-Fehler bei getConnection: " + e.getMessage() );
              e.printStackTrace();
        }
```

Ich krieg jetzt folgende Fehlermeldung:

DB-Fehler bei getConnection: Unexpected exception encountered during query.
java.sql.SQLException: Unexpected exception encountered during query.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2664)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568)
    at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1557)
    at com.mysql.jdbc.ConnectionImpl.loadServerVariables(ConnectionImpl.java:3868)
    at com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:3407)
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2384)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2153)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
    at java.sql.DriverManager.getConnection(DriverManager.java:664)
    at java.sql.DriverManager.getConnection(DriverManager.java:247)
    at dia.DbDia.start(DbDia.java:40)
    at dia.Dia.main(Dia.java:15)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 255
    at com.mysql.jdbc.ConnectionImpl.getServerCharacterEncoding(ConnectionImpl.java:3100)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2107)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2618)
    ... 19 more

Wenn ich einen falschen Datenbankname angebe, kommt: Unknown database
Bei falschem Passwort kommt: Access denied
Bei falschem Usernamen kommt: Client does not support authentication protocol requested by server; consider upgrading MySQL client

Es scheint also eine Verbindung zur Datenbank zu geben, aber ich bin jetzt mit meinem Latein am Ende.
Vielleicht kann mir jemand helfen

ps: Ich bin nicht so der Java-Freak, ich beschäftige mich erst seit der Rente mit Java, vorher habe ich jahrzentelang in anderen Sprachen programmiert.


----------



## mihe7 (18. Aug 2019)

Probier mal `jdbc:mysql://127.0.0.1:3306/dia?characterEncoding=UTF-8` - ich kann useUnicode nicht in der Doku zu Connector/J finden, vielleicht ist das das Problem.


----------



## herf (18. Aug 2019)

mihe7 hat gesagt.:


> Probier mal `jdbc:mysql://127.0.0.1:3306/dia?characterEncoding=UTF-8` - ich kann useUnicode nicht in der Doku zu Connector/J finden, vielleicht ist das das Problem.



Hallo miha7
vielen Dank für Deine Antwort, hat aber leider nichts geändert


----------



## mihe7 (18. Aug 2019)

Ah, sorry, ich sehe jetzt erst:


herf hat gesagt.:


> at com.mysql.jdbc.ConnectionImpl.getServerCharacterEncoding(ConnectionImpl.java:3100)


Probier mal `jdbc:mysql://127.0.0.1:3306/dia?characterEncoding=utf8mb4`, wenn das immer noch nicht funktioniert, dann einfach mal `jdbc:mysql://127.0.0.1:3306/dia`.


----------



## herf (18. Aug 2019)

mihe7 hat gesagt.:


> Ah, sorry, ich sehe jetzt erst:
> 
> Probier mal `jdbc:mysql://127.0.0.1:3306/dia?characterEncoding=utf8mb4`, wenn das immer noch nicht funktioniert, dann einfach mal `jdbc:mysql://127.0.0.1:3306/dia`.



Bei der 1. Version ändert sicht nicht, bei der 2. kommjetzt ein anderer Fehler;
Unknown initial character set index '255' received from server. Initial client character set can be forced via the 'characterEncoding' property.


----------



## mihe7 (18. Aug 2019)

Schau mal in Deiner my.cnf nach, was dort für `character_set_server` eingetragen ist. Alternativ kannst Du noch latin1 statt utf8mb4 probieren.


----------



## herf (18. Aug 2019)

mihe7 hat gesagt.:


> Schau mal in Deiner my.cnf nach, was dort für `character_set_server` eingetragen ist. Alternativ kannst Du noch latin1 statt utf8mb4 probieren.


My.cnf finde ich nicht, meinst Du my.ini? Dort ist character-set-server auskommentiert, latin1 hat auch nichts gebracht.


----------



## mihe7 (18. Aug 2019)

Ja, unter Windows heißt das Teil wahrscheinlich my.ini  

Verbind Dich mal per mysql mit Deiner DB und ruf mal auf:

SHOW VARIABLES LIKE 'character_set_server';


----------



## herf (18. Aug 2019)

character-set-server ist utf4mb4


----------



## mihe7 (18. Aug 2019)

utf4?!?


----------



## herf (18. Aug 2019)

utf8 natürlich


----------



## mihe7 (18. Aug 2019)

Und Du bist Dir sicher, dass Du Connector/J 8.0.17 verwendest?


----------



## herf (18. Aug 2019)

Ja, ist so im Classpath:

C:\Program Files (x86)\MySQL\Connector J 8.0\mysql-connector-java-8.0.17.jar


----------



## mihe7 (18. Aug 2019)

Hast Du den Treiber von der Seite runtergeladen, oder über den Windows-Installer?

Ist "dia" eine hochgezogene DB oder eine neu erstellte? Falls hochgezogen: kannst Du mal gegen die DB "mysql" verbinden? "jdbc:mysql://127.0.0.1:3306/mysql" nur am um zu sehen, ob das funktioniert.


----------



## herf (18. Aug 2019)

was verstehst du unter hochgezogene DB? Ich habe die DB vor ca 9 Jahren unter MySQL 4 war das glabe ich erstellt. Die verbindung zu msql bringt denselben Fehler


----------



## herf (18. Aug 2019)

Den Treiber habe ich mit dem MySQL Installer installiert, ich habe auch schon die ältere Version 8.0.11 probiert ohne Erfolg


----------



## mihe7 (18. Aug 2019)

herf hat gesagt.:


> Ich habe die DB vor ca 9 Jahren unter MySQL 4 war das glabe ich erstellt. Die verbindung zu msql bringt denselben Fehler


Ja, das meinte ich mit hochziehen. Die Verbindung zu mysql sollte aber unabhängig davon funktionieren. 

Um es kurz zu machen: ich habe keinen Schimmer, was jetzt noch falsch laufen kann. 

Einen Versuch der Verzweiflung hätte ich noch: lad Dir mal von https://dev.mysql.com/downloads/connector/j/ den Treiber nochmal runter, nimm aber "Platform Independent" und binde das Jar aus dem Paket in Dein Projekt ein.


----------



## herf (18. Aug 2019)

Auch das hat nichts gebracht. Ich werde auf jeden Fall weitersuchen, aber für heute ist's genug


----------



## herf (20. Aug 2019)

*Problem gelöst*
da war noch eine Library der MySQL-Version 5.5 im Project


----------

