MySQL Datenbankverbindung scheitert

dan1337

Neues Mitglied
Hi,

ich hab schon seit Längerem nichts mehr programmiert, aber jetzt wieder Lust bekommen etwas zu schreiben. =)
Als Einstiegsprojekt habe ich ein Programm gewählt, welches Daten von Textfeldern einließt und in eine MySQL-Datenbank schreibt.
Es handelt sich hierbei um ein Java-Applet, da ich es auf meinem Webserver meinen Freunden zur Verfügung stellen will. Das Programm ließt Handynummer, E-Mail, Homenummer und Name ein.

Ich habe ein PC, auf welchem ich das Ganze programmiere. Ich benutze hierbei NetBeans 6.8.
Auf diesem PC habe ich zusätzlich in VMware eine XP-VM laufen.
Hier habe ich den Xampp installiert. (Apachee und MySQL)
Dieser dient also als mein Webserver.

Durch KabelBW habe ich fast eine statische IP. (Wechselt max. 1 mal im Monat)

Netzwerktechnisch und Datenbanktechnisch alles kein Problem.
Nur scheitere ich an der Datenbankverbindung.

Wenn ich das Applet aus NetBeans heraus starte, kann ich eine Datenbankverbindung aufbauen!
-Keine Fehler und der dafür angelegt Benutzer wird auf dem MySQL Server als aktiv angezeigt.

Wenn ich allerdings das Applet via html-Datei starte bekomme ich einen Fehler:

Code:
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(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	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(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	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(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at Crawli.init(Crawli.java:43)
	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Caused by: java.net.SocketException: java.security.AccessControlException: access denied (java.net.SocketPermission 95.208.77.XXX:3306 connect,resolve)
	at com.mysql.jdbc.StandardSocketFactory.unwrapExceptionToProperClassAndThrowIt(StandardSocketFactory.java:404)
	at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:265)
	at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:280)
	at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2026)
	... 14 more
Meine öffentliche IP: 95.208.77.XXX ; Im Programm habe ich natürlich die Richtige verwendet ;)


Ausschnitt aus Quelltext:
Java:
import java.io.*;
import java.sql.*;

public class Crawli extends javax.swing.JApplet {

String Daten[] = new String[6];

Connection con = null;
Statement stmt = null;
ResultSet rs = null;
    
    /** Initializes the applet Crawli */
    
    @Override
    public void init()  {
        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    initComponents();
                }
            });
        } catch (Exception ex) {
            ex.printStackTrace();
           }


           try{ Class.forName("com.mysql.jdbc.Driver");
           }
           catch (Exception a){
               a.printStackTrace();
            TFname.setText("Treiber nicht erfolgreich eingebunden");

           }
      
           try {
           con = DriverManager.getConnection(
             "jdbc:mysql://95.208.77.xxx:3306/datensammlung", "raat", "est1337");
            }
            catch (SQLException e){
            e.printStackTrace();
            TFvorname.setText("Datenbankverbindung nicht erfolgreich");
            return;
            }

    }

Er springt bei der SQLException e heraus, da ich "Datenbankverbindung nicht erfolgreich" angezeigt bekomme.


Ach ja, HIIIIIIIIIIIIIIIIIIILFE ???:L

Ich wäre SEHR dankbar, wenn mir jemand weiterhelfen könnte :toll:
 

dan1337

Neues Mitglied
Vielen Dank schonmal für die Antworten. =)

Ich werde es gleich nachher mal ausprobieren und mich melden, ob es funktioniert hat.
 

kniffel

Mitglied
Hallo Leute,

ich habe heute leider das selbe Problem.
Damit ich nicht unnötig einen neuen Thread öffne, poste ich hier.

Folgende Situation:
Ich möchte genauso wie dan1337 ein Applet, dass eine Verbindung mit einer Datenbank erstellt, Daten ausliest und später dann evt. Einträge vornimmt.

Ich habe eine erfolgreiche Verbindung mit dem localhost im Programm selbst (ich benutze JavaEditor v9.1.4). Sobald ich aber das HTML außerhalb starte, also z.B. FF, bekomme ich nach dem druck auf meinen Button nichts zu sehen... Erst in der Java-Konsole erhalte ich lediglich eine einzige Meldung:
Communications link failure - The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
Ich habe beim signieren folgende Dateien im Quellcode der Bat eingefügt: "Neobux.jar manifest.mf mysql-connector-java-5.1.16-bin Neobux.class"
Ich hoffe das ist der richtige Weg beide Dinge zu signieren (Applet + Treiber).

Folglich nach dem signieren ein Start: Java fragt nach, ob ich das Applet ausführen möchte. Drücke ich auf meinen Start Button kommt ungefähr die Meldung: "Ausführen der potentiell gefährlichen Aktion blockieren?", die ich mit Nein beantworte...
Es folgt die selbe Meldung von oben wieder...

Ich hab bereits viele Themen hier und in google durchforstet, allerdings konnte ich keine Antwort auf das bestehende Problem finden.
Was kann hier noch der Fehler sein? Ich möchte das Applet später auf meinen Homeserver (Windows Server 2003) stellen um dann z.B. von einem anderen Computer darauf zugreifen zu können und einen Eintrag in der DB zu machen. Ist das prinzipiell überhaupt möglich?
MYSQL läuft, das sogenannte "skip-networking" ist mit # auskommentiert
Auf die DB kann man von außen zugreifen
Port 3306 ist am Router frei bzw. Port-Forwarded
Firewall blockiert ebenfalls nicht.
Allerdings bringen mir die Einstellungen alle nichts, wenn ich nicht einmal übern localhost drauf komme?...

Habe das Applet mit 127.0.0.1, sowohl als auch mit "localhost" durchprobiert...
Hier mein Code:
Java:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;


public class Neobux extends Applet implements ActionListener {

    String driver   = "org.gjt.mm.mysql.Driver";
    String url      = "jdbc:mysql://127.0.0.1/test2";
    String user     = "root";
    String password = "toor";

Button but;
TextField inconsole;
TextArea console, console2;

public void init() {
       resize(1100,700);
       setBackground(new Color(100,100,100));
       //Button
       but = new Button("Start");
       but.addActionListener(this);
       add(but);
       console = new TextArea("");
       console.setBackground(Color.BLACK);
       console.setForeground(Color.LIGHT_GRAY);
       console.setEditable(false);
       add(console);
       console2 = new TextArea("");
       console2.setBackground(Color.BLACK);
       console2.setForeground(Color.LIGHT_GRAY);
       console2.setEditable(false);
       add(console2);
       inconsole = new TextField("");
       add(inconsole);
}//Ende init

public void paint(Graphics g) {
           console.setBounds(120,250,300,200);
           console2.setBounds(520,250,300,200);
           inconsole.setBounds(120,480,300,20);
            //Button
           but.setBounds(400,200,100,50);
           g.setColor(Color.DARK_GRAY);
           g.fillRect(170,70,500,100);
           g.setColor(Color.WHITE);
           g.drawRect(1,1,1000,500);
}//Ende paint

public void actionPerformed(ActionEvent ae){
            Object wer = ae.getSource();
            if (wer==but) {
               try {
                   // Treiber laden
                   Class.forName(driver);
                   }//Ende Try
               catch(Exception e) {
               System.err.println(e.getMessage());
               System.exit(0);
               }//Ende catch

    Connection connection = null;
    Statement statement = null;

              try {
                  // Verbindung zur DB
                  connection = DriverManager.getConnection(url, user, password);
                  statement = connection.createStatement();
                  String query = inconsole.getText();
                  // Daten holen
                  ResultSet result = statement.executeQuery(query);
                  if(result!=null) {
                     // Spaltenüberschriften ausgeben
                     ResultSetMetaData rsmd = result.getMetaData();
                     for(int i=1; i<=rsmd.getColumnCount(); i++) {
                          System.out.print(rsmd.getColumnName(i));
                          console.append(String.valueOf(rsmd.getColumnName(i))+"\n");
                          System.out.print((char)9);
                     }//Ende for
                     System.out.println();
                     // Abfrageergebnisse ausgeben
                     result.beforeFirst();
                     while(result.next()) {
                           for(int column=1; column<=rsmd.getColumnCount(); column++) {
                           System.out.print(result.getObject(column));
                           console2.append(String.valueOf(result.getObject(column))+"\n");
                           System.out.print((char)9);
                           }//Ende for
                           System.out.println();
                     }//Ende while
                     result.close();
                  }//Ende if
    }//Ende try
    catch(SQLException e) {
      System.err.println(e.getMessage());
    }//Ende catch
    finally {
      if(statement!=null) {
        try { statement.close();} catch(Exception e) {}
      }//Ende if
      if(connection!=null) {
        try { connection.close();} catch(Exception e) {}
      }//Ende if
    }//Ende finally
            }//Ende if
}//Ende actionPerformed
}//Ende class

Ich hoffe es kann mir jemand helfen :)

*Edit:
Habe das signierte File auf den Server kopiert.
#1 Manuell über den Pfad funktioniert es nicht.
#2 Rufe ich es aber über die locale Webadresse auf, funktioniert es
#3 Rufe ich es über einen anderen Computer übers Net auf, funktioniert es nicht.
#4 Ändere ich die IP von (127.0.0.1 oder localhost) auf die öffentliche es Servers, oder die lokale im Netzwerk, und starte es im Programm, funktioniert es ebenfalls nicht. Allerdings bekomme ich hier folgenden Fehler:
null, message from server: "Host 'TOWER' is not allowed to connect to this MySQL server"
#5 Nachdem ich die IP auf die öffentliche IP des Servers geändert habe, die ganze Prozedur der signierung ebenfalls erledigt habe, bekomme ich nun die Meldung:
Could not create connection to database server.
Am Server: Nur in Firefox öffnen oder über http://localhost/...Neobux.html kommt auf das selbe raus mit der vorherigen Meldung.
Gehe ich über http://ServerIP/.../Neobux.html erhalte ich: "null, message from server: "Host '85-127-xxx-xxx.dynamic.xdsl-line.inode.at' is not allowed to connect to this MySQL server"
"
 
Zuletzt bearbeitet:

kniffel

Mitglied
Soo, nach sehr langer tüftelei bin ich doch noch selbst zur Lösung gekommen.
An folgendem hat es gelegen:

Damit man sich mit root, oder jedem anderen benutzernamen einloggen kann, muss dieser klarerweise ersteinmal in mysql/phpmyadmin definiert sein!!!

Somit musste ich mich auf meinem Server in phpmyadmin einloggen. Dort findet man den Reiter: Rechte.
Man findet eine Tabelle mit bereits vordefinierten Usern.
z.B.
Benutzer: root; Host: localhost; Passowort: Ja; Globale Rechte: ALL PRIVILEGES; Grant: Ja
damit hab ich mir einen neuen User erstellt:
Benutzer: Appletuser; Host: %; Passowort: Ja; Globale Rechte: ---; Grant: Ja/Nein

Tada, ich schreibe mein Applet um, logge mich somit mit Appletuser und PW ein. Der Host dabei ist sozusagen ALLES/von Überall...
Nocheinmal signieren, upload auf Server -> schon kann ich mit der webadresse von jedem PC aus darauf zugreifen.

Hoffe, dass es vielleicht jemanden weiterhilft ;)

Wie kann ich nun etwas in die Datenbank eintragen? Mit welcher Methode, Funktion geht das?

Schöne Grüße,
KniFFeL
 
Zuletzt bearbeitet:

kniffel

Mitglied
Ich spreche nicht von MySQL sondern Java. Mit welcher Methode/Funktion kann ich ihm den SQL Befehl senden? Wie man etwas abfragt oder in die DB mit MySQL einträgt ist kein Problem.
Allerdings ist das das Problem:
INSERT INTO ...
Can not issue data manipulation statements with executeQuery().
---------------
SELECT * FROM ...
funktioniert einwandfrei.
 

kniffel

Mitglied
Danke dir maki,
hat mit
Java:
statement.executeUpdate("insert into daten (nr,datum,preis,sonstiges) values(4,'2011-05-05',1,4);");
funktioniert. :D
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Datenbankverbindung zu MS Access Datenbankprogrammierung 4
Zrebna Wie mittels PL/SQL eine Datenbankverbindung blockieren? Datenbankprogrammierung 6
B Probleme mit Datenbankverbindung Datenbankprogrammierung 2
J Jar-Datei stellt keine Datenbankverbindung her Datenbankprogrammierung 3
B SQLite Frage zu SQLite Datenbankverbindung Datenbankprogrammierung 7
Danloc Informationen für Datenbankverbindung wo/wie speichern? Datenbankprogrammierung 11
T Problem mit Datenbankverbindung Datenbankprogrammierung 22
I Datenbankverbindung Oracle DB klappt nicht - getConnection returned null Datenbankprogrammierung 8
M Datenbankverbindung mit JSP herstellen Datenbankprogrammierung 19
D Keine Datenbankverbindung Datenbankprogrammierung 4
dat_vin JavaFX Datenbankverbindung über JPA und MySQL Error Datenbankprogrammierung 0
B Datenbankverbindung herstellen Datenbankprogrammierung 6
R Datenbankverbindung kann nicht hergestellt werden Datenbankprogrammierung 8
I SELECT bei Datenbankverbindung Datenbankprogrammierung 6
E Zuverlässige Datenbankverbindung Datenbankprogrammierung 4
B SQLite Java Login + Datenbankverbindung Datenbankprogrammierung 4
M Datenbankverbindung Access Datenbankprogrammierung 3
eskimo328 Datenbankverbindung ohne Passwort im Quelltext bei einer offline Anwendung Datenbankprogrammierung 14
Kenan89 Keine Datenbankverbindung möglich Datenbankprogrammierung 52
T Datenbankverbindung access funtioniert nicht Datenbankprogrammierung 21
K Problem mit Datenbankverbindung via Eclipse Datenbankprogrammierung 2
M Datenbankverbindung zu langsam beim Insert? Datenbankprogrammierung 6
E Datenbankverbindung mit Oracle JDBC und Eclipse Plugin Quantum db Datenbankprogrammierung 2
N Allg. Frage zur Datenbankverbindung Datenbankprogrammierung 2
C [MSSQL] Datenbankverbindung will nicht klappen... Datenbankprogrammierung 2
Hartigan Datenbankverbindung automatisch aktualisieren Datenbankprogrammierung 3
C MySQL Keine Datenbankverbindung Datenbankprogrammierung 6
A Datenbankverbindung mit einer Datenbank auf einem Webspace Datenbankprogrammierung 10
G Wie sieht eine Datenbankverbindung mit jndi aus? Datenbankprogrammierung 3
D Sicherheit für Datenbankverbindung Datenbankprogrammierung 19
MQue MySQL DatenbankVerbindung Datenbankprogrammierung 3
B Datenbankverbindung kann nicht aufgebaut werden. Datenbankprogrammierung 2
M Aus einem Applet eine Datenbankverbindung starten? Datenbankprogrammierung 26
G Datenbankverbindung mit Proxool aufrecht erhalten Datenbankprogrammierung 4
G iBatis Datenbankverbindung - DB-User übergeben Datenbankprogrammierung 4
J Warum ist es aufwendig eine Datenbankverbindung herzustellen Datenbankprogrammierung 3
E Datenbankverbindung verwalten Datenbankprogrammierung 6
J Fehler bei Oracle-Datenbankverbindung Datenbankprogrammierung 2
E Datenbankverbindung Java MySQL Exception Datenbankprogrammierung 10
K Datenbankverbindung zu MySQL in XAMPP Datenbankprogrammierung 11
M Dauerhafte Datenbankverbindung - Timeouts? Datenbankprogrammierung 4
timomeinen [Hibernate] Datenbankverbindung testen Datenbankprogrammierung 11
M Datenbankverbindung bricht nach ca. 12 Stunden Verbindung ab Datenbankprogrammierung 3
K Wann schließt ihr die Datenbankverbindung? Datenbankprogrammierung 7
E Datenbankverbindung von BIRT Datenbankprogrammierung 3
S Datenbankverbindung auslagen Datenbankprogrammierung 3
8 MySQL Datenbankverbindung herstellen FAQ Datenbankprogrammierung 2
A Was passiert wenn eine Datenbankverbindung unterbricht Datenbankprogrammierung 7
J MySQL Verbindung über JDBC scheitert immer Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben