# DB WebStarter



## sirair (18. Sep 2010)

Hallo,

ich kann ganz normal von eclipse aus wie unten besschrieben auf die DB zugreifen. Wenn ich allerdings die Anwendung über WebStarter ausführe erhalte ich eine NullPoin...., liegt daran das er die Quelle nicht finden kann. 
Was muss da geändert werden, damit es auch über den WebStarter funkt?

```
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

			String vFilename = "./bin/meine_db.mdb";
			String vDatabase = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";
			vDatabase += vFilename.trim() + ";DriverID=22;READONLY=true}";
			vConnection = DriverManager.getConnection(vDatabase,
					"", "");
```


----------



## Gelöschtes Mitglied 5909 (18. Sep 2010)

1. Wo erhälst du eine NullPointerException?

2. Stimmt den der Pfad? Lass ihn dir mal Ausgeben (auch bei der Webstart edition)

3. Dir ist klar, dass die access db lokal liegen muss und nicht auf dem server? Das Programm wird lokal ausgeführt.
-> wenn Programm von mehreren benutzt wird, haben alle einen anderen Datenbestand


----------



## sirair (18. Sep 2010)

es funktioniert nur nicht, wenn ich die Anwendung über den Webstarte ausführe. 
Also über den webstarter kann er den pfad des db nicht finden.
3. es wird bei jedem lokal die db geben


----------



## L-ectron-X (18. Sep 2010)

Das setzt doch aber voraus, dass die DB bereits lokal auf dem Client (Anwender-PC) liegt.


----------



## sirair (19. Sep 2010)

normal schon... 
Aber mir gehts in erster Linie drum, warum er das nicht ausführen kann.
Muss man im jnlp ein extra Eintrag machen?


----------



## hansmueller (20. Sep 2010)

Hallo,

zeig mal die ganze Fehlermeldung.

MfG
hansmueller


----------



## sirair (20. Sep 2010)

```
java.lang.NullPointerException
	at hs.esslingen.de.sms.database.SmsDatabaseAdministration.getUserByUserName(SmsDatabaseAdministration.java:62)
	at hs.esslingen.de.sms.main.SmsServiceApplication.main(SmsServiceApplication.java:123)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at com.sun.javaws.Launcher.executeApplication(Unknown Source)
	at com.sun.javaws.Launcher.executeMainClass(Unknown Source)
	at com.sun.javaws.Launcher.doLaunchApp(Unknown Source)
	at com.sun.javaws.Launcher.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
```


----------



## hansmueller (20. Sep 2010)

Datenbanken sind momentan noch nicht meine Stärke, aber wenn ich die Fehlermeldung richtig interpretiere, scheint das Problem nicht daran zu liegen, daß er die Datenbank nicht findet, sondern das etwas mit dem Anwendername nicht stimmt, bezüglich dieser SmsDatabase.

Korregiert mich bitte, wenn ich falsch liege.

MfG
hansmueller


----------



## sirair (20. Sep 2010)

das ist garantiert der Fehler, weil wenn ich als Quelle einen lokalen Pfad mit absoluter  url angebe, funkt es auch mit dem WebStarter....


----------



## Gelöschtes Mitglied 5909 (20. Sep 2010)

Wie wäre es du debuggst mal da rein? Sieht für mich so aus als wäre es ein anderer fehler


----------



## sirair (20. Sep 2010)

die Funktion getUserByUserName greift auf die Datenbank zu und holt sich die daten zum usernamen...
Allerdings kann er keine connection aufbauen...


----------



## hansmueller (21. Sep 2010)

sirair hat gesagt.:
			
		

> weil wenn ich als Quelle einen lokalen Pfad mit absoluter url angebe, funkt es auch mit dem WebStarter....



Ich gehe mal davon aus, daß du die Datenbank lokal auf dem Rechner hast und darauf zugreifen willst.
WebStart ist eine etwas komische Sache - es speichert die heruntergeladenen jars nicht einfach in irgend einen Ordner ab, sondern versteckt diese (zumindest in der aktuellen Version). Ich glaube, die jars werden sogar irgenwie aufgesplittet. Du wirst z. B. (unter Windows zumindest) nirgendswo deine "MeinProgramm.jar" finden, selbst wenn du es über WebStart heruntergeladen hast. (Außer die, welche du natürlich in deiner Entwicklungsumgebung hast.)
Das gleiche gilt für den Ausführungsort. Es gibt keinen, da es ja keine jar gibt, die irgendwo abgespeichert ist. Es scheint so, daß WebStart alles macht, um zu verhindern, daß man an die eigendlichen Programm-jars kommt.
Die relative Pfadangabe funktioniert nur, wenn die Sachen auch im Class-Path vorhanden sind.

Das sind zumindest meine Beobachtungen und Schlußfolgerungen daraus.

Wenn du die Datenbank nur auslesen und nichts darin abspeichern willst, wäre eine Lösung, die Datenbank in eine jar zu packen und diese zusammen mit dem Programm über WebStart zu verteilen.

MfG
hansmueller


----------



## sirair (21. Sep 2010)

ok, werde deine Lösung ausprobieren!!


----------



## sirair (22. Sep 2010)

Ich habe die Datenbank in eine jar gepackt. Wie erfolgt der Zugriff im Code auf die Datenbank?


----------



## hansmueller (22. Sep 2010)

Wenn ich richtig liege, benutzt du eine Access-Datenbank (meine_db.mdb).
Wenn die Datei "meine_db.mdb" direkt in einer Jar-Datei liegt (und nicht in einem Ordner innerhalb der Jar) und diese Jar in den Class-Path eingetragen ist, sollte diese eigendlich leicht zu finden sein.

Ich habe mit Access in Verbindung mit Java noch nie was gemacht, aber es könnte evtl. so funktionieren:

```
String vFilename = "meine_db.mdb"
```

Zum Vergleich, mit Derby (= Datenbankmanagementsystem komplett in Java geschrieben) würde es so aussehen:

```
static final String URLr = "jdbc:derby:classpath:verschldb;create=false;dataEncryption=true;bootPassword=Test01Test";
```
Bei mir hieß die Datenbank "verschldb". (Diese war auch noch verschlüsselt, daher das Paßwort.)
Du siehst, das man hier noch ein "classpath:" einfügen mußte. Du mußt schauen, ob es für den Datenbanktreiber, den du benutzt evtl. auch solche Schlüsselwörter gibt.

MfG
hansmueller


----------

