# Applet stucks at SQL Connection (jTDS JDBC)



## SirHans (7. Okt 2011)

Hi
Ich versuche gerade einen Login in einem Applet zu schreiben. Funktioniert auch soweit beim Ausführen über Eclipse aber wenn ich das Applet über den Browser ausführe bleibt es bei der connection Funktion einfach hängen ohne Fehlermeldung. Es geht einfach nicht weiter.


```
import java.sql.*;
import java.util.List;
import java.util.ArrayList;

class SQLCon
{
	Connection con;

    public SQLCon() {}

    public String Connect()
    {
    	String returnstring = "";
        try
        {
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost/DB;instance=SQLEXPRESS;");
            returnstring = "connected";
        }
        catch (Exception e)
        {
            e.printStackTrace();
            returnstring = e.toString();
        }
        return returnstring;
    }

    public void Close()
    {
		try
		{
			if(con!=null) con.close();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
    }
    
    public void cmd(String cmdstring)
    {
    	Statement statement = null;
		try
		{
	    	statement = con.createStatement();
	    	statement.execute(cmdstring);
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		
		try
		{
			if(statement!=null) statement.close();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
    }
}
```


----------



## L-ectron-X (7. Okt 2011)

Schau mal in die Java-Konsole, da steht bestimmt eine AccessControlException drin.
Du musst die DB-Bibliothek und dein Applet signieren. In den FAQ gibts ein Tutorial mit Batchdatei.

BTW: Meiner Meinung nach, ist das eine ganz unsichere Sache, ein Login zu einer DB mit einem Applet zu realisieren. Man kann das Applet dekompilieren und den Code einsehen...


----------



## SirHans (7. Okt 2011)

Danke das gin schnell 

Wie kann ich die Java-Konsole öffnen? Beschäftige mich zum ersten mal so richtig mit Java aber kann schon viele andere Sprachen wie C#, C++ etc.
Was meinst du mit signieren? 

Ja das hab ich schon mitbekommen. Gibt es keine möglichkeit den Code zu sichern? Wie gesagt bin neu bei Java und wollte einfach mal eine etwas größere Web-Anwendung mit Datenbank usw. in einer neuen Sprache schreiben.


----------



## L-ectron-X (7. Okt 2011)

SirHans hat gesagt.:


> Wie kann ich die Java-Konsole öffnen?


Das hängt von deiner Programmierumgebung ab. Wenn du eine IDE hast, zeigt die meistens die Fehlerausgaben der Java-Konsole irgendwo an.
Ansonsten startet die Konsole beim Programmstart mit, wenn du nicht mit _javaw_ interpretierst, sondern mit _java_. _javaw_ unterdürckt die Konsole.



SirHans hat gesagt.:


> Was meinst du mit signieren?


Steht alles in den FAQs. 



SirHans hat gesagt.:


> Gibt es keine möglichkeit den Code zu sichern?


"Echte" Java-Webanwendungen laufen mit JSP. Kommt aber im privaten Sektor eher selten vor, weil die Provider für einen solchen Server meistens Geld sehen wollen.
Daher greifen fast alle Freizeitentwickler auf PHP zurück. Wenn du ein Applet schreibst, überlässt du es dann PHP, die Verbindung zum DB-Server herzustellen, weil das nicht einsehbar ist. Das Applet übergibt dem PHP-Skript dann einfach nur die eingegebenen Login-Daten.
Die Signierung des Applets würde in dem Fall auch entfallen, weil das Applet sich mit keinem anderen Server verbinden müsste.


----------



## SirHans (7. Okt 2011)

Wie zuvor gesagt funktioniert das ganze im "normalen" Ausführen aber nicht im browser (Firefox, Safari etc., aber Java ist an)

Ups... Ich hab mir den Bericht gerade mal durchgelesen aber ich glaube nicht dass das das ist was ich suche. Ich möchte auf die Datenbank des Servers zugreifen auf dem das Applet liegt und nicht auf dem Pc der den Browser ausführt.

Ich versuche eigentlich ein Spiel mit awt zu machen und keine Webseite an sich. Dafür benutze ich ASP.NET.


----------



## L-ectron-X (7. Okt 2011)

Dann öffne mal die Java-Konsole vom Browser oder schau mal (unter Windows) in den System-Tray, da sollte ein Java-Symbol (Kaffetasse) zu sehen sein. Über dieses Symbol kannst du ebenfalls die Konsole (per Rechtsklick) öffnen.

Ein Applet hat eingeschränkte Rechte. Es darf sich u.a. nur zu dem Server verbinden, von dem es heruntergeladen wurde. Aber die Verbindung zu einem Datenbankserver ist auch eine Verbindung zu einem fremden Server. Wenn das Applet das also machen soll (was aber unsicher ist), muss es signiert sein.


----------



## SirHans (7. Okt 2011)

Also das hat mich schonmal weitergebracht. Jetzt kommt der Error: java.lang.ExceptionInInitializerError
	at net.sourceforge.jtds.jdbc.Driver.parseURL(Driver.java:373)

Und was ist wenn ich ein Programm schreibe das auf dem Server laufen lasse das Verbindungen von dem Applet fängt und zurücksendet (wie Login, Register, etc.)? Wäre das mit Packets möglich? Ich möchte nur wissen ob das möglich ist weil mir es langsam so vorkomt das Java nicht grad die beste Lösung dafür ist.


----------



## L-ectron-X (7. Okt 2011)

SirHans hat gesagt.:


> Jetzt kommt der Error: java.lang.ExceptionInInitializerError
> at net.sourceforge.jtds.jdbc.Driver.parseURL(Driver.java:373)


Beim Initialisieren einer/der Klasse ist ein Fehler aufgetreten. Das kann verschiedene Ursachen haben, die meistens unterhalb der obersten Exception bei _cause_ mit aufgeführt werden.



SirHans hat gesagt.:


> Und was ist wenn ich ein Programm schreibe das auf dem Server laufen lasse das Verbindungen von dem Applet fängt und zurücksendet (wie Login, Register, etc.)?


Das ginge, wenn du auf dem Server Programme starten kannst.



SirHans hat gesagt.:


> Wäre das mit Packets möglich?


Wie ist das gemeint?



SirHans hat gesagt.:


> ...weil mir es langsam so vorkomt das Java nicht grad die beste Lösung dafür ist.


Java ist äußerst vielseitig und sehr mächtig. Aber es gibt dennoch Einsatzzwecke, die mit Java nicht abgedeckt werden können.
Es kommt wirklich darauf an, was genau du vorhast.


----------



## SirHans (7. Okt 2011)

> Beim Initialisieren einer/der Klasse ist ein Fehler aufgetreten. Das kann verschiedene Ursachen haben, die meistens unterhalb der obersten Exception bei cause mit aufgeführt werden.


OK, das werd ich mir später mal genauer angucken.



> Das ginge, wenn du auf dem Server Programme starten kannst.


Auf dem Server hab ich komplette Admin-Rechte.



> Wie ist das gemeint?


Also das ich ein Packet vom Applet zu dem Programm schicke und ein Packet von dem Programm zum Applet zurückschicke. Denk mal das das geht ich werd später mal googlen.


----------



## L-ectron-X (7. Okt 2011)

Das geht auf jeden Fall.


----------



## SirHans (7. Okt 2011)

Danke! Ich werde das so mal ausprobieren und mich bei Problemen wieder melden (hoffe mal garnicht )


----------



## SirHans (9. Okt 2011)

So ich habe jetzt den Server geschrieben und auch eine Verbindung zwischen dem Applet und dem Server. Jetzt gibt es aber 2 Probleme.

1. Problem:
Wenn ich den Clienten schließe tritt dieser Error auf anstatt dass der User sich ausgeloggt hat.
java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(Unknown Source)
an der Zeile: 

```
for (String buffer;(buffer = in.readLine()) != null;) 
    	    	{
	
		        }
```

2. Problem:
Wenn ich das Applet im Browser ausführe kommt diese Fehlermeldung:
java.security.AccessControlException: access denied (java.net.SocketPermission...
Ich will das Apllet immoment nur auf den localhost zugreifen lassen und das Applet liegt auch auf meinem Pc also warum kommt dann die Fehlermeldung ich dachte das Programm darf auf den Server zugreifen von dem es kommt. Ich weiß ich könnte das Applet wieder signieren aber das muss der User erstmal zulassen und ich will nicht dass der misstrauisch wird 


PS: Soll ich das lieber in dem richtigen Forum nochmal posten? weil hier kann jeder direkt sehen was ich genau machen will.


----------



## SirHans (9. Okt 2011)

Erstes Problem hab ich selbst gefixt. Ich versuch das zweite natürlich weiterhin zu fixen aber wenn irgendwer eine Idee hat versuch ich die gerne^^


----------



## L-ectron-X (9. Okt 2011)

SirHans hat gesagt.:


> Erstes Problem hab ich selbst gefixt.


Sagst du da auch mal (für die "Nachwelt"), was das Problem war?



SirHans hat gesagt.:


> 2. Problem:
> Wenn ich das Applet im Browser ausführe kommt diese Fehlermeldung:
> java.security.AccessControlException: access denied (java.net.SocketPermission...


Korrekt! Rechner != Server. Ein Server ist immer eine Software, die auf einem Rechner läuft. D.h., du kannst mehrere Server auf einem Rechner laufen lassen.
Und in deinem Fall verbindet sich das Applet mit einem anderen Server, nämlich nicht mit dem, von dem es heruntergeladen wurde. Ergo: AccessControlException.
Applets leben ausschließlich in Webseiten.

Zwei Lösungsansätze dafür:

die (ungewünschte) Signierung des Applets
die Verbindung mit deinem Server auf einem anderen Weg
In dem Fall kann man das Applet in eine PHP-Seite einbetten, und die aus dem Applet ausgelesenen Daten an deinen Server weiterreichen. Wobei mit einer PHP-Seite auch der direkte Zugriff auf die Datenbank OK wäre.


----------



## SirHans (9. Okt 2011)

Was das Problem war weiß ich selbst nicht aber ich hab einfach ein try catch eingebaut und bei einem Fehler muss der Client sich nunmal (wie auch immer) ausgeloggt haben 

Die Benutzer des Applets sollen untereinander sich auch verständigen können deshalb wird das mit PHP wohl nichts beziehungsweise sehr umständlich.
Danke funktioniert perfekt.

PS: Wie kann man sich hier im Forum überhaupt anmelden?  Und kann ich diese Beiträge dann auf den angemeldeten Account irgendwie übertragen?


----------



## L-ectron-X (9. Okt 2011)

Melde dich einfach über Registrieren an. Dann schreibst du mir eine PN und ich übertrage dann deine Gast-Beiträge auf dein neues Benutzerkonto.


----------

