# JAR-Datei und Datenbank



## Joerg74 (3. Feb 2020)

Hallo,

ich habe in meinem Programm eine Verbindung zu einer SQLite-Datenbank. Der Zugriff und die Verbindung auf diese klappt aus der IDE (Intellij Communty Edition) problemlos. Sobald ich aber nun eine JAR-Datei erstelle, erfolgt keine Verbindung zur Datenbank. Die Datendabk liegt im gleichen Ordner wie das JAR-Archiv. Der Pfad zur Datenbank ist auch passend gesetzt.
Kann mir jemand sagen, was ich beim Ertsellen des JAR-Archives vergesse oder falsch mache ?
Ansonsten läuft das Prgramm aus dem JAR-Archiv problemlos.


----------



## MoxxiManagarm (3. Feb 2020)

Joerg74 hat gesagt.:


> Kann mir jemand sagen, was ich beim Ertsellen des JAR-Archives vergesse oder falsch mache ?


Nunja, dafür bräuchten wir ein Vergleichsobjekt, d.h. Code. Meinst du nicht?


----------



## kneitzel (3. Feb 2020)

a) Möglicher Fehler: Ist denn das jar von SQLite im Classpath, wenn Du Deine jar startest?
b) Und was für einen Fehler bekommst Du, enn Du das jar startest?
c) Wie @MoxxiManagarm schon sagte: Code wäre auch ganz nett.


----------



## Joerg74 (4. Feb 2020)

Hier ist der Code:


```
import javax.swing.*;

import java.sql.*;


public class Database {

    public static void connect(Person person) {

        Connection conn = null;

        try {

            String url = "jdbc:sqlite:" + System.getProperty("user.dir") + "\\Database.db";


            DriverManager.registerDriver(new org.sqlite.JDBC());


            conn = DriverManager.getConnection(url);


            PreparedStatement prep = conn.prepareStatement("insert into Kontrolle values (?, ?);");


            prep.setString(1, person.getName());

            prep.setString(2, person.getSurname());

            prep.addBatch();


            conn.setAutoCommit(false);

            prep.executeBatch();

            conn.setAutoCommit(true);


        } catch (SQLException e) {

            JOptionPane.showMessageDialog(null,e.getMessage());

        } finally {

            try {

                if (conn != null) {

                    conn.close();

                }

            } catch (SQLException ex) {

                JOptionPane.showMessageDialog(null,ex.getMessage());

            }

        }

    }

}
```

Aber wie gesagt. In der IDE funktioniert es. Als JAR-Archiv nicht.


----------



## LimDul (4. Feb 2020)

Was kommt für eine Exception? Ist der Treiber im Classpath drin? (org.sqllite.JDBC)?  Wie wird der Treiber mit dem Jar verknüpft. Standardmäßig enthält das Jar externe Abhängigkeiten nicht, so dass man die beim start des Jar explizit mittels -cp pfad/zu/driver/jar angeben muss. Oder man baut das Jar, dass die Abhängigkeiten mit in das Jar gepackt werden (Fat-Jar)


----------



## Joerg74 (4. Feb 2020)

Ich habe den Treiber mit eingebunden.


----------



## Joerg74 (4. Feb 2020)

Als Fehler erhalte ich folgende Meldung:


----------



## LimDul (4. Feb 2020)

Joerg74 hat gesagt.:


> Ich habe den Treiber mit eingebunden.
> 
> Anhang anzeigen 12992


Und genau da liegt das Problem. Die Bibliothek liegt da in deiner Entwicklungsumgebung rum. Aber im Jar File ist die nicht mit eingebunden, weil das dafür nicht gedacht ist.

Das heißt, du musst dein Programm so starten:

java -cp sqlite-jdbc-3.30.1.jar -jar dein.jar (Oder etwas anders, ich hab das schon ewig nicht mehr so gemacht). 

Oder du schaust, ob es so wie du das Jar baust eine Option gibt, dass er die External Librarieres entspackt und mit reinpackt.


----------



## Joerg74 (5. Feb 2020)

Leider habe hab ich nichts dergleichen bei Intellij Idea Community Edition gefunden. Ich habe jetzt einfach zu eclipse gewechselt. Hier kann ich alle erforderlichen Libs und sonstiges mit einbinden. Damit funktioniert die JAR-Datei mit dem Datenbankzugriff nun.
Danke an alle für die Antworten.


----------

