DB WebStarter

sirair

Aktives Mitglied
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?
Java:
	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,
					"", "");
 
G

Gelöschtes Mitglied 5909

Gast
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

Aktives Mitglied
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
 

sirair

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

sirair

Aktives Mitglied
Java:
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

Bekanntes Mitglied
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

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

Gelöschtes Mitglied 5909

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

sirair

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

hansmueller

Bekanntes Mitglied
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
 

hansmueller

Bekanntes Mitglied
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:
Java:
String vFilename = "meine_db.mdb"

Zum Vergleich, mit Derby (= Datenbankmanagementsystem komplett in Java geschrieben) würde es so aussehen:
Java:
 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
 

Neue Themen


Oben