Beim Jar-File funktioniert Datenbankverbindung nicht mehr

dasago

Mitglied
Ich versuch eine Access-Datenbankverbindung herzustellen um Daten aus einer Tabelle heraus zu lesen. Dies funktioniert ja über die JDBC-ODBC-Bridge. Ich benutze als Entwicklungsumgebung Eclipse. Dort funktioniert alles auch perfekt. Es wird er Treiber gefunden und eine Verbindung mit der Datenbank hergestellt. Dort habe ich die Datei „classes12.jar“ unter dem Ordner „jdbc“ importiert. Kommen wir nun zu meinem Problem:
Sobald ich mein Code in ein *.jar File exportier funktioniert dieser nicht mehr. Ich gehe davon aus, dass nun der Treiber für die Datenbank nicht mehr gefunden wird. Kann mir einer sagen, woran das liegt?
Zu meinem *.jar File leg ich noch die Datei „classes12.jar“. Im Manifest meiner *:jar Datei gebe ich noch den Classpath: „Class-Path: classes12.jar“ an. Kann mir einer von euch weiterhelfen?

Hier noch mein Code für die Dtaenbankverbindung:

Code:
package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

import javax.swing.JOptionPane;

public class a_Con {
	int clmCnt;
	
	public ArrayList connection(String sqlQuery) {
		try{
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		}
		catch(Exception e){
		      System.out.println("Fehler bei JDBC-ODBC-Bridge" + e);
		      JOptionPane.showMessageDialog(null, "Error with JDBC-ODBC-Bridge");
		      return null;
		}
	    Connection con;
	    Statement stm;
	    ResultSet rs;
	    try{
	    	con = DriverManager.getConnection("jdbc:odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=R:/Vertraulich/db.mdb");
	    	stm = con.createStatement();
		    rs = stm.executeQuery(sqlQuery);
	    }
	    catch ( Exception e ) {
	      System.out.println("Fehler bei Datenbankzugriff" + e);
	      JOptionPane.showMessageDialog(null, "Failed connection to database ", "Warning", JOptionPane.ERROR_MESSAGE);		      
	      return null;
	    }
	   
	    try {
	    	ArrayList result = new ArrayList();
    		int i = 0;
	    	while (rs.next()) {
	    		result.add(i, rs.getString(2));
	    		i ++;
  		}
	    	rs.close();
		    stm.close();
			con.close();
		    return result;
	    }
	    catch ( Exception e ) {
	      System.out.println("Fehler bei Tabellenabfrage" + e );
	      JOptionPane.showMessageDialog(null, "Error with the table request");
	      return null;
	    }	    
	}
}
 
Wie ist denn deine Ordnerstruktur? Also wo liegt dein Jar und wo liegt das classes12.jar wenn du es nicht aus eclipse startest?
 
Diese liegen beide auf der gleichen Ebene.. d.h. beide im gleichen Verzeichnis!
C:\test\ *:jar
C:\test\classes12.jar
 
Starte mal dein Jar mit
Code:
java -verbose -jar dein.jar

Und schau mal was da so ausgegeben wird.
 
Hmm muss ich des nun verstehen?
Mit deinem Befehl wird die Datenbankverbindung hergestellt!
Bei einem Doppelklick auf mein Jar File nicht!
Und nu..?

Danke schonmal!
 
Moin!
Doch bei einem Doppelklick wird die Verbindung wohl auch hergestellt, nur siehst du es nicht. Gehe mal unter Windows auf Extras-> Ordneroptionen-> Dateitypen. Beim jar Eintrag gehste auf "Erweitert" , bearbeitest den "open" Befehl und setzt den Anwendungspfad von javaw.exe auf java.exe.
Javaw öffnet nämlich keine Kommandokonsole..

*grüssle*
MeinerEiner
 
Es funktioniert trotzdem nicht!

Wenn die Datenbankverbindung hergestellt ist, erscheint normal die Benutzeroberfläche was hier nicht der Fall ist!
Hab es nun umgestellt, so wie du es gesagt hast...
es öffnet sich ganz kurz die CMD-Box und schließt sich dann wieder und oben erkennt ma nur ganz kurz: an unexpected error.. mehr kann ich da net lesen
aber wie gesagt mit dem Befehl von vorher klappt es.. ich versteh das nicht!

EDIT:

Wenn ich das jar File in der Commandbox mit "java -jar test.jar" aufruf funktioniert es, aber wenn ich nur test.jar mach dann nicht.
Bei einem Doppelklick wird ja auch nur test.jar ausgeführt oder?
Es erscheint dann foglende Fehlermeldung:

# An unexpected error has been detected by Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d3f4df2, pid=2460, tid=2532
#
# Java VM: Java HotSpot(TM) Client VM (1.6.0_03-b05 mixed mode, sharing)
# Problematic frame:
# C 0x6d3f4df2
#
# An error report file with more information is saved as hs_err_pid240.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
 
Zuletzt bearbeitet:
Wenn ich das jar File in der Commandbox mit "java -jar test.jar" aufruf funktioniert es, aber wenn ich nur test.jar mach dann nicht.
Bei einem Doppelklick wird ja auch nur test.jar ausgeführt oder?
Nein, es wird java -jar test.jar aufgerufen. D.h. so muss dein Programm über die Konsole gestartet werden, und so wird es auch gestartet, wenn du darauf doppelklickst. Das war auch genau das, was du unter Dateitypen editieren solltest...

*grüssle*
MeinerEiner
 
Ja aber genau das funktioniert ja nicht, wenn ich ein Doppelklick drauf mach, sondern nur wenn ich es per Console eingeb! Auch bei deiner Änderung indem ich das "w" weg mach
 
Geht denn:
Code:
javaw -jar dein.jar

Wenn es nicht geht mach mal:
Code:
javaw -jar dein.jar > log.txt

Und schau in die log.txt rein was da steht.
 
Zurück