H2 embedded Database und kein Connex nach Export aus Eclipse

quidnovi

Erfahrenes Mitglied
Hi Ihr hoffentlich Helfende :)

Verwende Eclipse Indigo, Java Version: 1.7.0_25

In meinen Workspace habe ich eine H2 DB eingebettet, zu welcher bei Start der Desktop Applikation aus Eclipse heraus,
die Verbindung hergestellt wird und bearbeitet werden kann.

Die Struktur im Workspace habe ich als Bild hinzugefügt.
Da dies ein recht großes Ding ist, habe ich alle unnotwendigen Packages ausgeschnitten.

Nun zum Problem:
Wie Eingangs erwähnt, wird die Verbindung zur H2 DB aus Eclipse heraus einwandfrei hergestellt.
Dies geschieht über die DBData.java
Den Pfad gebe ich wie folgt an:
Java:
final static String sep = System.getProperty("file.separator");
public static String dir = System.getProperty("user.dir");

public static final String URL = "jdbc:h2:" + dir + sep + "h2" + sep + "bin" 
	+ sep + "homeDerDb" + sep + "lib" + sep + "h2" + sep + "bin;IGNORECASE=TRUE;CIPHER=AES";

public static final String DRIVER = "org.h2.Driver";
public static final String USER = "xxx";
public static final String PWDS = "xxx";
public static Connection connection;

Verarbeitet werden diese Daten in der DBConnect.java
Java:
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBConnect {
	
	/**
	* Die Klasse DBConnect laedt den Treiber und
	* verbindet zur Datenbank H2.
	*/
	public static void connect() {
		
		// Treiber laden
		try {
			Class.forName(DBData.DRIVER).newInstance();
		} catch (Exception ex) {
			System.out.println("Der JDBC-Treiber konnte nicht geladen werden.");
			return;
		}
		// Verbindung herstellen
		try {
			DBData.connection = DriverManager.getConnection(DBData.URL, DBData.USER, DBData.PWDS);
		} catch (SQLException ex) {
			System.out.println("Verbindung failed: " + DBData.URL);
			System.out.println("Die Verbindung zur Datenbank konnte nicht hergestellt werden. "
					+ "Die Fehlermeldung lautet: " + ex.getMessage());
			return;
		}
	}
	
}

Wenn ich aber nun dieses Projekt als .jar exportiere (das funktioniert ohne Fehlermeldung) und - weil dieses ausschliesslich auf Windows - Rechnern läuft - mit Launch4J
eine .exe generiert wird, habe ich keine Verbindung zur H2 - DB mehr.

Folgender Fehlermeldung werde ich angesichtig:
Code:
Executing: C:\Users\Home(PC)\Desktop\Berechnungssoftware\app.exe
java.lang.NullPointerException
	at at.Projektordner.main.cards.EigeneGriffe.findGriffeEigene(EigeneGriffe.java:1227)
	at at.Projektordner.main.cards.EigeneGriffe.getTblGriffeEigene(EigeneGriffe.java:794)
	at at.Projektordner.main.cards.EigeneGriffe.setTblGriffeEigene(EigeneGriffe.java:803)
	at at.Projektordner.main.cards.EigeneGriffe.<init>(EigeneGriffe.java:748)
	at at.Projektordner.main.ApplicationStart.initGUI(ApplicationStart.java:195)
	at at.Projektordner.main.ApplicationStart.<init>(ApplicationStart.java:133)
	at at.Projektordner.main.ApplicationStart.createAndShowGui(ApplicationStart.java:353)
	at at.Projektordner.main.ApplicationStart$1.run(ApplicationStart.java:126)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$200(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Ein Blick in die EigeneGriffe.java zeigt, dass die Verbindung zur DB nicht geklappt hat.
Java:
try {
			DBConnect.connect();
			Statement stmt;
			stmt = DBData.connection.createStatement(); // <-- hier wird die Fehlermeldung ausgelöst

                        // --- weiterer Code

Tja...soweit habe ich hoffentlich alles Notwendige vermerkt...

Nun die Frage nch dem "Warum"....warum keine Verbindung?

Ich hoffe, dass sich jemand findet, der mir hier weiterhelfen kann :)
Danke schon mal im Voraus
 

Anhänge

  • eclipseStruktur.png
    eclipseStruktur.png
    94,1 KB · Aufrufe: 16
Zuletzt bearbeitet:

quidnovi

Erfahrenes Mitglied
Hi @ all :)

habe das Problem nun doch lösen können, auch wenn ich nicht ganz glücklich damit bin.

Der Fehler lag offenbar darin, dass ich keine runnable jar exportierte.
Als runnable funktioniert das Ganze.

Der Wermutstropfen liegt in dem, dass es einen Ordner mit der H2 - DB benötigt.
Somit kann der Anwender die bin.h2.db aufrufen.
Diese ist wohl verschlüsselt, nur könnte diese gelöscht werden.
Nun ja...es funktioniert wenigstens.

Wie kann ich die DB in die Anwendung bringen, so dass diese nicht sichtbar ist?
Geht das überhaupt?

Vielleicht kann mir da ja wer Auskunft erteilen :)