Mit mySQL DB verbinden

T

Turbo1976

Neues Mitglied
0
Hallo an euch,

habe da ein Problem mit der Verbindung an eine mySQL DB. Habe bei Strato eine DB mit einer Tabelle und 4 Spalten angelegt. Diese Tabelle möchte ich nun über JAVA füllen.
Hierzu habe ich in Android Studio "mysql-connector-java-5.1.34-bin.jar" als Library eingefügt.

Mein Code sieht so aus:

Code:
 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
  
 ...
  
 try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://rdbms.strato.de/DBxxxxxx","Uxxxxxx","pw");
             Statement st = con.createStatement();
            ResultSet rs = st.executeQuery("INSERT INTO Tabelle VALUES (\"01.01.2015\",\"00:00:00\",\"8.234\",\"49.234\")");
 
            while(rs.next())
            {
            }
             con.close();
        }
        catch(Exception e) {
            e.printStackTrace();
        }

Gebe ich die Query in phpmyadmin ein, dann klappt das ohne Probleme. Leider jedoch nicht über JAVA.

Was mache ich falsch?
 
Evtl. einfach mal nicht global alle Exceptions wegbügeln (das macht man eh nicht wenn man noch am rumspielen ist. Da will man die haben). Sonden mal schauen wo der Fehler kommt.

cu
 
Das führst du in einer App aus, richtig? Nicht als Server auf deinem WebSpace?

Dann solltest du dich fragen ob Strato überhaupt Datenbankverbindungen von außen zulässt. Denn normalerweise sollte man NIE seine Datenbank nach außen zugänglich machen, sondern immer über einen (wie auch immer gearteten) WebService gehen. Das ist ansonsten ein zu großes Sicherheitsrisiko.

Ansonsten brauchen wir den Stacktrace um dir eventuell helfen zu können, weil die Aussage "geht nicht" ohne weitere Infos ist immer etwas dürftig.
 
Mit einem auf meiner Pi lokal gespeicherten PHP-Skript konnte ich ohne Probleme auf die mySQL DB zugreifen. Außerdem gibt es Strato direkt auf der Homepage ein Skript für PHP zum DB-Zugriff.
Daher gehe ich einfach mal davon aus, dass der Zugriff von außen funktioniert.

Wie könnte ich denn einen Webservice implementieren? Über PHP auf dem Server?
 
Ja, PHP dann. Schnellen Erfolg für einen kleinen WebService hatte ich mit Slim:
Slim Framework

Wenn du von deinem Pi auf die DB kommst ist es schonmal kein Problem von extern drauf zu kommen. Falls du bei dem direkten Zugriff aus der App bleiben möchtest, dann brauchen wir halt ein paar Fehlerausgaben um dir zu helfen.
 
Bei der Verbindung erhalte ich folgende Fehlermeldung:

Code:
[U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]
 [LEFT]com.mysql.jdbc.exceptions.jdbc4.CommunicationsException[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000]: Communications link failure[/LEFT]
[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] [LEFT][/LEFT]
[/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000] [LEFT]The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.[/LEFT]
[/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2] [LEFT] [/LEFT]
[/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000] [LEFT]at sun.reflect.NativeConstructorAccessorImpl.newInstance0([/COLOR][/SIZE][/COLOR][/SIZE][U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]Native Method[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000])[/LEFT]
 [LEFT]at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)[/LEFT]
 [LEFT]at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)[/LEFT]
 [LEFT]at java.lang.reflect.Constructor.newInstance(Unknown Source)[/LEFT]
 [LEFT]at com.mysql.jdbc.Util.handleNewInstance([/COLOR][/SIZE][/COLOR][/SIZE][U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]Util.java:377[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000])[/LEFT]
 [LEFT]at com.mysql.jdbc.SQLError.createCommunicationsException([/COLOR][/SIZE][/COLOR][/SIZE][U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]SQLError.java:1036[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000])[/LEFT]
 [LEFT]at com.mysql.jdbc.MysqlIO.<init>([/COLOR][/SIZE][/COLOR][/SIZE][U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]MysqlIO.java:338[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000])[/LEFT]
 [LEFT]at com.mysql.jdbc.ConnectionImpl.coreConnect([/COLOR][/SIZE][/COLOR][/SIZE][U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]ConnectionImpl.java:2232[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000])[/LEFT]
 [LEFT]at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly([/COLOR][/SIZE][/COLOR][/SIZE][U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]ConnectionImpl.java:2265[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000])[/LEFT]
 [LEFT]at com.mysql.jdbc.ConnectionImpl.createNewIO([/COLOR][/SIZE][/COLOR][/SIZE][U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]ConnectionImpl.java:2064[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000])[/LEFT]
 [LEFT]at com.mysql.jdbc.ConnectionImpl.<init>([/COLOR][/SIZE][/COLOR][/SIZE][U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]ConnectionImpl.java:790[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000])[/LEFT]
 [LEFT]at com.mysql.jdbc.JDBC4Connection.<init>([/COLOR][/SIZE][/COLOR][/SIZE][U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]JDBC4Connection.java:44[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000])[/LEFT]
 [LEFT]at sun.reflect.NativeConstructorAccessorImpl.newInstance0([/COLOR][/SIZE][/COLOR][/SIZE][U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]Native Method[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000])[/LEFT]
 [LEFT]at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)[/LEFT]
 [LEFT]at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)[/LEFT]
 [LEFT]at java.lang.reflect.Constructor.newInstance(Unknown Source)[/LEFT]
 [LEFT]at com.mysql.jdbc.Util.handleNewInstance([/COLOR][/SIZE][/COLOR][/SIZE][U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]Util.java:377[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000])[/LEFT]
 [LEFT]at com.mysql.jdbc.ConnectionImpl.getInstance([/COLOR][/SIZE][/COLOR][/SIZE][U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]ConnectionImpl.java:395[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000])[/LEFT]
 [LEFT]at com.mysql.jdbc.NonRegisteringDriver.connect([/COLOR][/SIZE][/COLOR][/SIZE][U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]NonRegisteringDriver.java:325[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000])[/LEFT]
 [LEFT]at java.sql.DriverManager.getConnection(Unknown Source)[/LEFT]
 [LEFT]at java.sql.DriverManager.getConnection(Unknown Source)[/LEFT]
 [LEFT]at DBConnect.main([/COLOR][/SIZE][/COLOR][/SIZE][U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]DBConnect.java:30[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000])[/LEFT]
 [LEFT]Caused by: [/COLOR][/SIZE][/COLOR][/SIZE][U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]java.net.ConnectException[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000]: Connection refused: connect[/LEFT]
 [LEFT]at java.net.DualStackPlainSocketImpl.connect0([/COLOR][/SIZE][/COLOR][/SIZE][U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]Native Method[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000])[/LEFT]
 [LEFT]at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)[/LEFT]
 [LEFT]at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)[/LEFT]
 [LEFT]at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)[/LEFT]
 [LEFT]at java.net.AbstractPlainSocketImpl.connect(Unknown Source)[/LEFT]
 [LEFT]at java.net.PlainSocketImpl.connect(Unknown Source)[/LEFT]
 [LEFT]at java.net.SocksSocketImpl.connect(Unknown Source)[/LEFT]
 [LEFT]at java.net.Socket.connect(Unknown Source)[/LEFT]
 [LEFT]at com.mysql.jdbc.StandardSocketFactory.connect([/COLOR][/SIZE][/COLOR][/SIZE][U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]StandardSocketFactory.java:213[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000])[/LEFT]
 [LEFT]at com.mysql.jdbc.MysqlIO.<init>([/COLOR][/SIZE][/COLOR][/SIZE][U][SIZE=2][COLOR=#0066cc][SIZE=2][COLOR=#0066cc]MysqlIO.java:297[/U][/COLOR][/SIZE][/COLOR][/SIZE][SIZE=2][COLOR=#ff0000][SIZE=2][COLOR=#ff0000])[/LEFT]
 [LEFT]... 15 more[/LEFT]
 [/COLOR][/SIZE][/COLOR][/SIZE]

Habe das auch mal mit einer lokalen mySQL-DB probiert, selber Fehler :sad:
 
Hat deine App auch die Internet Permission?
 
Ja, sie kann parallel per SSH ohne Probleme Dinge tun.

Habe den Quellcode der Klasse nun auch mal in ein "reines" JAVA-Projekt gepackt. Dasselbe Problem :sad:

Mit einem PHP-Skript komme ich ohne Probleme an die DB ran... Da ich das Ganze nun erstmal über eine lokale DB auf meiner Pi teste, kann man auch zu 100% ausschließen, dass auf Strato-Seite etwas geblockt wird.

Aber ein andere Sache: mit dem Quellcode benutze ich ja die java.sql Sachen und nicht den importierten Java-Connector. Muss ich den dann überhaupt importieren? Kann sich da evtl. etwas "beißen"?
 
Problem gelöst.

Nachdem ich die Konfiguration auf der Pi noch einmal durchgesehen habe, habe ich festgestellt, dass externe Aufrufe nicht erlaubt sind. Nachdem ich das angepasst hatte ging es mit dem Quellcode.

Bei Strato hatte ich vorher Zugriff auf eine mySQL DB in einem Paket, bei dem man anscheinend externe Zugriffe aktivieren konnte (und diese auch waren). Jetzt habe ich jedoch nur noch ein "Standardpaket" und das erlaubt eben keine externen Zugriffe mehr :-(

Der Quellcode hatte aber noch einen anderen Fehler. Ein INSERT kann man nicht mit einem executeQuery() machen ;-)

Danke für eure Unterstützung!
 

Ähnliche Themen

B
Antworten
0
Aufrufe
689
basementmedia
B
B
Antworten
4
Aufrufe
492
bb321
B
FabianDev
Antworten
5
Aufrufe
558
swa00
swa00
Zurück
Oben Unten