Zugriff auf eine Access-Datenbank innerhalb eines jar-Files

Status
Nicht offen für weitere Antworten.

Matze2002

Mitglied
Hallo zusammen!

Ich hab eine kleine Anwendung mit Hilfe von Eclipse erstellt. Die dabei anfallenden Daten kann der Benutzer (u.a.) in einer Access-Datenbank speichern. Hierfür liegt der Einfachheit halber im Projektpfad eine leere (Default-) Access-Datenbank, die zunächst in das vom Benutzer gewünschte Arbeitsverzeichnis kopiert und anschließend mit Daten gefüllt werden soll. Innerhalb Eclipse funktionier das alles soweit tadellos.

Das Problem:
Wenn ich ein jar-file erstelle, wird die Datenbank offenbar nicht mehr gefunden. Es kommt immer eine java.io.FileNotFoundException (Das System kann den angegebenen Pfad nicht finden)
Warum denn!? In Eclipse geht's doch auch!

Hier ist der relevante Code-Ausschnitt:
Java:
...
File filePath = new File(path, "database.accdb"); //path ist der vom Benutzer ausgewählte Zielpfad für die Datenbank "database"
try {
    if(!filePath.exists()) {
        String sourceFile = new String("startup/database.accdb");
        String targetFile = new String(path+"/database.accdb");
        filePath.createNewFile();
        CopyFile.copyFile(sourceFile, targetFile); //kopieren der Default-Datenbank ins Arbeitsverzeichnis
    }
} 
catch (IOException e) {
    e.printStackTrace();
}
...

weiterer Ausschnitt:
public static void copyFile(String src, String dest) {
    FileInputStream  fis = null;
    FileOutputStream fos = null;
    try {
        fis = new FileInputStream( src );
        fos = new FileOutputStream( dest );
        copy( fis, fos );
    }
    catch(IOException e) {
        e.printStackTrace();
    }
    finally {
        if(fis != null) {
            try {
                fis.close(); 
            } 
            catch(IOException e) {
                 e.printStackTrace();
            }
        }
        if(fos != null) {
            try { 
                fos.close(); 
            } 
            catch(IOException e) {
                e.printStackTrace();			
            }
        }
    }
}

Vielen Dank schon vorab für jede Anregung.

Mit freundlichen Grüßen,
Matze2002
 
Zuletzt bearbeitet:

L-ectron-X

Gesperrter Benutzer
Es ist nicht möglich in eine gerade im Zugriff befindliche Jar-Datei zu schreiben.
Wenn sich deine Access-DB also mit in der Jar-Datei befindet, funktioniert das nicht.

Oder wird die Datei ins Benutzerverzeichnis kopiert und du versuchst dann darauf zuzugreifen?
 

Matze2002

Mitglied
Oder wird die Datei ins Benutzerverzeichnis kopiert und du versuchst dann darauf zuzugreifen?
Ja, genau. Oder besser gesagt, sie SOLL aus dem jar-file ins Benutzerverzeichnis kopiert werden. Aber schon beim Zugriff auf die (in dem jar-file liegende) Datenbank innerhalb des jar-files kommt es zu der FileNotFoundException. (Wie ich darauf zugreife, steht in dem ersten Posting.) Das heißt, der Kopiervorgang der Datenbank ins Benutzerverzeichnis misslingt bereits. Somit komm ich gar nicht mehr dazu, Daten in die Datenbank zu schreiben. Seltsamerweise wird aber die Datenbank bei der Ausführung in Eclipse gefunden und der Kopiervorgang klappt.

Viele Grüße
 
Zuletzt bearbeitet:

Matze2002

Mitglied
Vielen Dank für die Antworten und den Link. Dass es in einem jar keine files gibt wusste ich bislang noch nicht.
Ich hab den Code jetzt folgendermaßen abgeändert:

Java:
Ausschnitt aus Initiator.class:
try {
    if(!filePath.exists()) {
        String sourceFile = new String("startup/database.accdb");
        String targetFile = new String(path+"/database.accdb");
        filePath.createNewFile();
        CopyFile.copyFile(sourceFile, targetFile); //kopieren der Default-Datenbank ins Arbeitsverzeichnis
    }
} 

Methode aus Copy.class:
public static void copyFile(String src, String dest) {
    URL in = Copy.class.getResource(src); 
    FileInputStream  fis = null;
    FileOutputStream fos = null;
    try {
        fis = new FileInputStream( in.toString() );
        fos = new FileOutputStream( dest );
        copy( fis, fos );
    }
    catch(IOException e) {
        e.printStackTrace();
    }
    finally {
        if(fis != null) {
            try {
                fis.close(); 
            } 
            catch(IOException e) {
                 e.printStackTrace();
            }
        }
        if(fos != null) {
            try { 
                fos.close(); 
            } 
            catch(IOException e) {
                e.printStackTrace();            
            }
        }
    }
}

Es funktioniert aber immer noch nicht. Jetzt fliegt in Zeile 15 eine NullPointerException. Was mache ich falsch?
Ich hab's auch schon mit ClassLoader.getSystemResourceAsStream versucht (ClassLoader.getResourceAsStream geht ja bei static nicht). Leider auch ohne Erfolg... :-(
 

Matze2002

Mitglied
Oh, sorry! Ich meine natürlich Zeile 17. Peinlich...
Dort sollte ja die Quell-URL in einen String umgewandelt werden, damit der Dateiinhalt über einen FileInputStream eingelesen und dann mit Hilfe des FileOutputStreams in die Zieldatei geschrieben werden kann. Allerdings liefert
Java:
 Copy.class.getResource(src);
offenbar null zurück, sodass die NullPointerException fliegt und es überhaupt nicht zum Einlesen der Quelldatei (also der zu kopierenden Datenbank) kommt.
 

Matze2002

Mitglied
Hallo maki,

vielen Dank für den Hinweis mit getResourceAsStream(). Nach längerem Porbieren hat es jetzt (endlich) geklappt! :):)

Viele Grüße,
Matze2002


P.S.: Für alle, die evtl. auf dasselbe Problem stoßen, ist hier der funktionierende Codeausschnitt:
Java:
Ausschnitt aus Initiator.class:
try {
    if(!filePath.exists()) {
        InputStream sourceFile = Initiator.class.getResourceAsStream("/startup/database.accdb");
        String targetFile = new String(path+"/database.accdb");
        filePath.createNewFile();
        CopyFile.copyFile(sourceFile, targetFile); //kopieren der Default-Datenbank ins Arbeitsverzeichnis
    }
} 
 
Methode aus Copy.class:
public static void copyFile(InputStream src, String dest) {
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream( dest );
        copy( src, fos );
    }
    catch(IOException e) {
        e.printStackTrace();
    }
    finally {
        if(fis != null) {
            try {
                fis.close(); 
            } 
            catch(IOException e) {
                 e.printStackTrace();
            }
        }
        if(fos != null) {
            try { 
                fos.close(); 
            } 
            catch(IOException e) {
                e.printStackTrace();            
            }
        }
    }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Wie kann ich Zugriff auf eine MS Access DB (mit JDBC) über Netzwerk erreichen? Datenbankprogrammierung 7
S Zugriff auf eine große Datenmenge von MS Access per JDBC Datenbankprogrammierung 11
D Was passiert bei absolut zeitgleichem Zugriff auf eine Tablerow Datenbankprogrammierung 7
I Zugriff auf eine Datenbank auf dem Webserver Datenbankprogrammierung 2
G Wie baut man eine Anwendung mit DB Zugriff Datenbankprogrammierung 3
D Problem beim Zugriff auf eine Oracle-DB Datenbankprogrammierung 23
Beginner22 Zugriff auf Datenbank aus Java über mariadb Datenbankprogrammierung 3
H MariaDB-Zugriff mittels Java SE Datenbankprogrammierung 3
X MySQL Java hat keinen Zugriff auf MySQL Datenbankprogrammierung 9
M Datenbank vor unerlaubtem Zugriff durch Benutzer schützen Datenbankprogrammierung 3
L Zugriff auf ein Resultset Datenbankprogrammierung 7
R jdbc-Zugriff Nicht erlaubt ? Datenbankprogrammierung 16
K Eclipse: JBoss Hibernate Tool: Kein Zugriff auf Datenbank Datenbankprogrammierung 5
D Gleichzeitiger Zugriff auf der DB Datenbankprogrammierung 11
J mySQL- Java Application - Zugriff über Internet Datenbankprogrammierung 3
D JavaFX Anwendung zugriff auf MySQL DB. Datenbankprogrammierung 2
F Zugriff auf ein bestimmte Row Datenbankprogrammierung 13
S HSQLDB Zugriff auf Access Datenbank Datenbankprogrammierung 0
K MySQL Datenbank 2facher Zugriff Datenbankprogrammierung 1
M DB-Zugriff funktioniert nach JAR-Erstellung nicht mehr Datenbankprogrammierung 3
P Datenbank Zugriff fehlgeschlagen Datenbankprogrammierung 9
B MySQL JDBC Zugriff auf entfernt Datenbank, fehlende Rechte Datenbankprogrammierung 2
L Zugriff auf lokal gespeicherte mySQL Datenbank Datenbankprogrammierung 3
L MySQL App/Java Zugriff auf Mysql-DB funktioniert nicht Datenbankprogrammierung 1
W MySQL -Server Einstellung -- Zugriff übers lokale Netzwerk Datenbankprogrammierung 1
R Oracle jdbc Zugriff auf Oracle Datenbankprogrammierung 2
T Derby/JavaDB Zugriff auf DB mit exportiertem Programm Datenbankprogrammierung 12
A MySQL-Zugriff auf Raspberry Pi Datenbankprogrammierung 2
T PostgreSQL Best Practice: Konkurrierender DB-Zugriff mit meherern Programmen? Datenbankprogrammierung 20
D .mdb Datenbank Zugriff fehlgeschlagen Datenbankprogrammierung 5
B Datenbanken schützen vor Zugriff Datenbankprogrammierung 3
E Zugriff auf MySQL-Datenbank Datenbankprogrammierung 4
K MySQL Zugriff auf Remote-DB verweigert Datenbankprogrammierung 6
G MySQL Zugriff auf Datenbank Objekt Datenbankprogrammierung 19
C Hibernate n:m mittels Zwischentabelle und bidirektionaler Zugriff Datenbankprogrammierung 2
M Zugriff auf mdb via ODBC steuern Datenbankprogrammierung 2
A Zugriff auf DB-Tabellen mit Objekten Datenbankprogrammierung 3
I Zugriff auf Datenbank nach Erstellen einer Executable Jar Datei verweigert Datenbankprogrammierung 10
J Derby/JavaDB Zugriff ohne Entwicklungsumgebung Datenbankprogrammierung 5
E H2 - Globalen Zugriff auf die Datenbank? Datenbankprogrammierung 10
J Zugriff auf MySQL-Datenbank Datenbankprogrammierung 5
F Zugriff auf MS Access-Datenbank mit jackcess Datenbankprogrammierung 10
F suche Erstanschub für DB-Zugriff Datenbankprogrammierung 9
E einfache Frage bei DB-Zugriff Datenbankprogrammierung 11
P MySQL Remote Zugriff Datenbankprogrammierung 2
C Gleichzeitiger Zugriff auf Datensatz Datenbankprogrammierung 5
T Problem bei Zugriff auf Access Datenbank Datenbankprogrammierung 7
T MySQL Zugriff ohne Angabe der Datenbank Datenbankprogrammierung 3
J Frage zu Synchronisation bei parallelem Zugriff, speziell mit JPA Datenbankprogrammierung 2
T DB Zugriff mit Java Web Datenbankprogrammierung 6
R Zugriff auf SQL im PreparedStatement Datenbankprogrammierung 4
F Zugriff auf MS Access DB Datenbankprogrammierung 3
J Nullpointer Exception bei Zugriff auf Datenbank Datenbankprogrammierung 13
J Zugriff auf Access-Datenbank Datenbankprogrammierung 3
A Zugriff auf Remote MySQL-DB mit JAR-File Datenbankprogrammierung 7
R Java DB Zugriff Datenbankprogrammierung 2
T Zugriff auf Derby-Datenbank will einfach nicht klappen Datenbankprogrammierung 22
G Zugriff auf Datenbank im Internet Datenbankprogrammierung 6
J Java DB Zugriff auf Access (Migration auf andere DB) Datenbankprogrammierung 8
G treiber für datenbank zugriff Datenbankprogrammierung 3
L Datenbank URL Zugriff Datenbankprogrammierung 9
QDog JPA persistence.xml auslagern/extern Zugriff Datenbankprogrammierung 2
A HSQLDB Performance bei erstem Zugriff Datenbankprogrammierung 6
S Datenbank zugriff optimieren - zugriff ohne cursor? Datenbankprogrammierung 7
A Zugriff auf DB-Pool, der von Servlet initialisiert wurde Datenbankprogrammierung 4
J MYSQL-Zugriff mittels einer Java-Bean Datenbankprogrammierung 42
M mySQL zugriff funktionert nach ca4 stündiger laufzeit nicht Datenbankprogrammierung 6
J Zugriff mit DataSource Datenbankprogrammierung 7
M Zugriff für andere sperren Datenbankprogrammierung 11
K Zugriff mittels JDBC funktioniert nur lokal Datenbankprogrammierung 5
G Hibernate Zugriff Datenbankprogrammierung 5
E JDBC Oracle Fehler, zugriff auf datenbank (Cluster) Datenbankprogrammierung 5
D ODBC Zugriff auf MDB-Datenbank, Insert Into ohne Funktion Datenbankprogrammierung 2
T Zugriff auf MS-Access-DB ist grottenlangsam. Normal? Datenbankprogrammierung 9
G Verwendung neuen Treiber für JDBC-Zugriff auf OracleDB Datenbankprogrammierung 5
G Access Zugriff, DB auf Server, Applet Datenbankprogrammierung 4
D Kann nicht auf MySQL Datenbank Zugriff Datenbankprogrammierung 9
G Policy Eintrag für SQL Zugriff im Netzwerk Datenbankprogrammierung 10
S Java SQL-Exception bei Zugriff auf MSAccess Datenbankprogrammierung 2
S JDBC Zugriff auf SQLServer Datenbankprogrammierung 9
D Datenbank zugriff über Client/Server Datenbankprogrammierung 4
M Zugriff auf PostgreSQL mit JAva! Datenbankprogrammierung 7
F Zugriff auf ODBC-Datenbank übers Netzwerk Datenbankprogrammierung 6
G Problem beim Zugriff SQL 2000 Datenbankprogrammierung 2
T Verwaltungsystem mit grafischer Oberfläche mit Zugriff auf. Datenbankprogrammierung 6
C Zugriff auf MS Access Datenbankprogrammierung 4
D Zugriff auf Paradox-Datenbank Datenbankprogrammierung 10
B ResultSet aus Session geladen, aber kein Zugriff möglich Datenbankprogrammierung 6
D HSQLDB Datenbank Zugriff! Datenbankprogrammierung 4
L Programm-Architektur bei DB-Zugriff Datenbankprogrammierung 6
R Zugriff auf MySQL-Datenbank im Internet Datenbankprogrammierung 13
L Zugriff von Applet auf mysql-DB Datenbankprogrammierung 2
K Zugriff auf Access-Datenbank Datenbankprogrammierung 4
R Datenbank zugriff funktioniert nur offline Datenbankprogrammierung 2
G Fehlermeldung beim Zugriff auf SQL-Server-DB Datenbankprogrammierung 3
D Mysql zugriff aus java nicht moeglich Datenbankprogrammierung 2
B Wie kann ich eine Jtable mit Inhalt einer SQL Abfrage füllen Datenbankprogrammierung 14
I SaaS Applikation: pro Kunde eine Datenbank / Schema oder eine DB für alle Kunden? Datenbankprogrammierung 76
Zrebna PostgreSQL-Query in eine MicrosoftSQL-Query konvertieren - chatGPT hilft nur bedingt. Datenbankprogrammierung 3
T Spring MongoDB: Prüfen ob bereits eine Email existiert Datenbankprogrammierung 15

Ähnliche Java Themen

Neue Themen


Oben