2010-11-22 19 views
2

Ich habe die folgende Situation: Ich habe einen Java-Code, der mit einer Datenbank (MySQL) verbunden ist. Wenn ich den Java-Code von Eclipse ausführe und Daten aus der Datenbank nehme, ist alles in Ordnung. Aber wenn ich Java-Code von HTML-Code als Applet leite, wirft es Null-Zeiger-Ausnahme, und ich erkennen, dieses Problem in diesem Fall auftreten, auf den folgenden Java-Code:Null Pointer Exception wirft in getConnection()

private Connection getConnection() throws SQLException{ 
    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     String name="jdbc:mysql://localhost:3306/sensors_data"; 
     String username="root"; 
     String psw="11111"; 

     conn = DriverManager.getConnection(name,username,psw); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 
    return conn; 

}

Das Objekt „conn " ist Null.

+0

Sie laufen Applet in der gleichen Maschine, wo es für Sie von Eclipse gearbeitet hat? –

+0

Ist das Applet signiert? –

+1

Ich hoffe, das ist nicht Ihr echtes Passwort – darioo

Antwort

1

Ersetzen Sie localhost durch den Computernamen, auf dem sich die Datenbank befindet, und versuchen Sie es erneut.

5

Nun, wenn DriverManager.getConnection() eine Ausnahme auslöst, drucken Sie die Ausnahme aus, geben aber trotzdem zurück. Sie sollten wahrscheinlich die Ausnahme an den Aufrufer weiterleiten lassen - schließlich ist es nicht so, dass der Aufrufer jetzt eine Verbindung hat, die er verwenden kann.

(Du auch jede Ausnahme abfangen, statt nur SQLException, was eine schlechte Idee ist.)

Ich würde nicht erwarten, dass direkt von einem Applet in eine Datenbank zu verbinden, obwohl - Ich kann mich nicht an die genauen Einschränkungen von Applet-Netzwerkverbindungen erinnern, aber das könnte das Problem sein. Wo läuft die Datenbank im Vergleich zum Webserver? Wenn es sich nicht auf demselben Host befindet, von dem aus das Applet veröffentlicht wird, würde ich nicht erwarten, dass es ohne spezielle Berechtigungen überhaupt eine Verbindung herstellen kann. (Der Versuch, localhost zu verbinden ist besonders unwahrscheinlich zu arbeiten, wie ich vermute.)

Sie sollten in der Lage sein, die Ausnahme von DriverManager.getConnection in Ihrem Debug-Log natürlich geworfen, um zu sehen - das ist die erste Anlaufstelle sein soll, sowie Behebung der Ausnahmebehandlung

-1

Das Problem ist, dass Sie das Conn innerhalb des Threads {try {} zurückgeben sollten. Oder Sie können eine Verbindungsvariable als Klassenfeld erstellen und dann der Verbindung innerhalb des try {} - Profils den Wert conn zuweisen. Dann wird das Problem hoffentlich gelöst.

public static Connection conn1 = null; 

public static Connection getConnection(){ 
    try { 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     Connection conn = DriverManager.getConnection 
       ("jdbc:mysql://localhost/?user=root&password=root"); 
     if(conn != null){ 
      System.out.println("Connect database successfully."); 
      conn1 = conn; 
     } 
     else System.out.println("Connection failed..."); 
     return conn; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 
+1

Sorry .. Aber das ergibt keinen Sinn :) Die NPE wird im OP verursacht, weil er gerade den Stack-Trace ausgedruckt hat, anstatt eine Exception zu werfen und somit den Code weiter laufen zu lassen. – BalusC

Verwandte Themen