# MySQL in .jar: was ist an diesem Manifest falsch?



## zubi (15. Jun 2004)

Hallo,

ich will meine Applikation (welche Zugriff auf MySQL-DB hat) aus einem .jar-Archiv starten und habe dafür die JDBC-Treiber ins .jar-File reingetan (genauer in den ordner "src", wo auch alle anderen Klassen liegen).

Das Package ist also "src", und mein Manifest sieht folgendermassen aus:

Manifest-Version: 1.0
Class-Path: src/mysql-connector-java-3.0.14-production-bin.jar
Created-By: NetBeans IDE
Specified-By: src/Server.jarContent
Main-Class: src.Server

Die Verbindung zur DB wird erfolgreich hergestellt, beim ersten Zugriff jedoch bleibt alles hängen; ohne Fehlermeldung.

Woran könnte das liegen?

danke und gruss,
zubi


----------



## nollario (16. Jun 2004)

hmm...

seltsam. jedenfalls würde ich sagen, hast du den treiber korrekt angelegt, sonst hättest du bereits eine ClassNotFoundException bekommen müssen, während du die Verbindung zu MySql erstellt hast.

Kannst Du vielleicht etwas mehr Code posten, um uns zu zeigen, wo genau das Teil stehen blieb?


----------



## zubi (16. Jun 2004)

danke für die antwort! das schräge an der sache ist wirklich das ausbleiben jeglicher fehlermeldungen! sonst hasst man die dinge, jetzt wünsch ich mir sehnlichst eine   .
das prog. läuft übrigens ohne .jar einwandfrei; ich muss da was verbockt haben.

vielleicht hilft die betreffende klasse ja weiter:


```
package src;

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.io.File;
import java.io.PrintWriter;
import java.io.BufferedWriter;
import java.io.FileWriter;

/**
 * Die Klass baut die Verbindung zur Datenbank auf und steuert Abfragen
 * sowie Zugriffe.
 */
public class DatabaseConnection{
    private Connection con;
    private Statement stat;
    private ResultSet rs;
    private static final File file = new File(System.getProperty("user.home") + 
                                            File.separator + "MySQL.txt");

    /**
     * Erzeugt neue Instanz von DatabaseConnection und öffnet Verbindung zur DB.
     */
    public DatabaseConnection() {
        try {
            // Erstellung eines Logs für alle Verbindungsvorgänge des SQL-Servers
            PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(file, true)), true);
            
            DriverManager.setLogWriter(out);
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql:///javachat?user=test?password=test");
            
            if (!con.isClosed()) {
                System.out.println("Verbindungsaufbau zu MySQL-Server erfolgreich...");
            } else {
                System.out.println("Verbindung zu MySQL-Server fehlgeschlagen");
            }
            stat = con.createStatement();        
        } catch (SQLException ex) {
            // Errorhandling...
            System.out.println("SQLException: " + ex.getMessage()); 
            System.out.println("SQLState: " + ex.getSQLState()); 
            System.out.println("VendorError: " + ex.getErrorCode()); 
        } catch (Exception e){
            System.out.println(e);
        }
    }
    
    /**
     * Überprüft ob die Eingabe eines Users mit einem Eintrag in der Datenbank
     * übereinstimmt.
     * @param username Der vom User eingegebene Benutzername
     * @param password Das vom User eingegebene Passwort
     * @return true, wenn Eintrag gefunden wurde
     */
    public boolean entryCheck(String username, String password){
        boolean b = false;
        try {
            rs = stat.executeQuery("SELECT registration.Username, registration.Passwort" + 
                                    " FROM registration"+
                                    " WHERE registration.Username = \"" + username + "\" AND "+
                                    "registration.Passwort = \"" + password + "\";");
            rs.next();
            if (rs.getString(1) != null){
                b = true;
            }
        } catch (SQLException sql){
            return false;
        }
        return b;
    }
    
    /**
     * Überprüft, ob der vom neuen User gewünschte Username schon vergeben ist.
     * @param username der gewünschte Username
     * @param password das gewünschte Passwort
     * @return true, wenn Benutzername bereits vorhanden ist
     */
    public boolean regCheck(String username, String password){
        boolean b = false;

        try {
            rs = stat.executeQuery("SELECT registration.Username, registration.Passwort" + 
                                    " FROM registration"+
                                    " WHERE registration.Username = \"" + username + "\";");
            rs.next();
            if (rs.getString(1) != null){
                b = true;
            }
            
        } catch (SQLException sql){
            return false;
        }
        return b;
    }
    
    /**
     * Erstellt einen neuen Eintrag in der User-Datenbank.
     * @param username neuer Benutzername
     * @param password Passwort des neuen Benutzers
     * @param sex Geschlecht des Benutzers
     * @param date Eintragsdatum in die Datenbank (vom Server gesetzt)
     */
    public void createEntry(String username, String password, char sex, String date){
        try {
            stat.execute("INSERT INTO registration VALUES (" + "\"" + username + 
                                                                "\", \"" + password + 
                                                                "\", \"" + sex + "\", \"" 
                                                                + "n" + "\", \"" + date + "\");");
            System.out.println("New User inserted: " + username);
        } catch (SQLException sql){
            System.out.println(sql);
        }
    }
}
```

danke und gruess,
zubi


----------



## zubi (16. Jun 2004)

ok! problem gelöst! ich hatte eine klasse, welche einmal für casting benutzt wird nicht im .jar-archiv.... eine fehlermeldung wär ne meldung!!!

trotzdem noch was zum manifest:

damit es mit den jdbc-treibern funktioniert, muss ich den classpath folgendermassen setzen:

Class-Path: mysql-connector-java-3.0.14-production-bin.jar 

d.h., ohne src/ davor, obwohl ich das .jar-file im ordner src hab'?!? 

wie kommt das?

gruess,
zubi


----------



## nollario (17. Jun 2004)

wenn unter src deine sourcen liegen, ist dort wohl auch dein classpath... das heisst wenn du nur den namen des jars angibst, wird er in diesem (src verz) anfangen zu suchen... und findets


----------



## Thomblin (7. Mrz 2006)

Hi,

man kann also ein .jar File in ein anderes .jar File einfügen? Finde ich praktisch, da ich obiges auch machen möchte, da man für die DB Anbindung ja die besagten sourfen benötigt.

Mein Frage: Kann ich mit eclipse beim erstellen eines .jar Files angeben, dass er die .jar Datei, die für den Datenbank Zugriff zuständig ist, automatisch mit packen und benutzen soll?


----------

