HSQLDB Problem beim Treiberladen im Jar

Namamiri

Mitglied
Hallo,
Ich hab ein Problem beim Treiberladen wenn ich das Projekt in Jar exportiere. Unexportiert funktioniert aber noch alles. Ich brauche umbedingt eine schnelle lösung

Java:
package Database;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.sql.Array;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import org.hsqldb.*;
import javax.swing.table.TableModel;

import org.hsqldb.jdbc.JDBCDriver;
import MusikplayerPack.Interface;



/**
 * Verwaltung der Datenbank
 * @author Namamiri (Burak Yarali)
 * 
 */
@SuppressWarnings({ "rawtypes", "unused" })
public class CreateDatabase
{  
	public CreateDatabase() 
    {
    	try{
    		Class.forName("org.hsqldb.JDBCDriver");
            } catch (Exception e)
            {System.out.println("ERROR: failed to load HSQLDB JDBC driver."); 
            e.printStackTrace(); 
            return;
            }
    Connection con = null;
    try
    {
      con = DriverManager.getConnection(
    		  "jdbc:hsqldb:file:Musikdatenbank/hsql; shutdown=true", "root", "" );
      Statement stmt = con.createStatement();
    }
    catch ( SQLException e )
    {
      e.printStackTrace();
    }
    finally
    {
      if ( con != null )
      {
        try {
            con.close();
            } catch ( SQLException e ) {
                e.printStackTrace();
            }
      }
    }
    }

    /**
     * @return Es wird ein ArrayList zurueckgegeben für das Spiel
     * 
     */
    private static ArrayList getMusiktitelSpiel() 
    {	
    	
    	Connection con = null;
	try {
		con = DriverManager.getConnection(//verbinden mit der Datenbank
		  "jdbc:hsqldb:file:Musikdatenbank/hsql; shutdown=true", "root", "" );
		Statement stmt = con.createStatement();
    	String sql = "SELECT * FROM Musiktitelliste Where SPIELJANEIN=true"; //Abfrage zum laden der fuer Spiel zugelassener Musik
    	ResultSet RSW = stmt.executeQuery(sql);
    	return extract(RSW); //Umwandlung in eine Arraylist
    			
    	}
		catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
		}
		finally
	    {
	      if ( con != null )
	      {
	        try {
	            con.close();
	            } catch ( SQLException e ) {
	                e.printStackTrace();
	            }
	      }
	}
	
	return null;
    }
    /**
     * @return Es wird wieder eine Arraylist zurueckgegeben vonder Ganzen Datenbank-->Musiktitelliste
     */
    private static ArrayList getMusiktitel() 
    {	
    	
    	Connection con = null;
	try {
		con = DriverManager.getConnection(
		  "jdbc:hsqldb:file:Musikdatenbank/hsql; shutdown=true", "root", "" );
		Statement stmt = con.createStatement();
    	String sql = "SELECT * FROM Musiktitelliste"; //Abfrage alles laden ohne Where
    	ResultSet RSW = stmt.executeQuery(sql);
    	return extract(RSW);
    			
    	}
		catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
		}
		finally
	    {
	      if ( con != null )
	      {
	        try {
	            con.close();
	            } catch ( SQLException e ) {
	                e.printStackTrace();
	            }
	      }
	}
	
	return null;
    }	
    /**
     * @param ID Hier wird die Bedingung gegeben als int
     * @return es werden nur die Musiktitel zuruekgegeben welche diese ID haben
     */
    private static ArrayList getMusiktitel(int ID) 
    {	
 
    	Connection con = null;
	try {
		con = DriverManager.getConnection(
		  "jdbc:hsqldb:file:Musikdatenbank/hsql; shutdown=true", "root", "" );
		Statement stmt = con.createStatement();
    	String sql = "SELECT * FROM Musiktitelliste Where ID = "+ ID; //Abfrage alles laden ohne Where
    	ResultSet RSW = stmt.executeQuery(sql);
    	return extract(RSW);
    			
    	}
		catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
		}
		finally
	    {
	      if ( con != null )
	      {
	        try {
	            con.close();
	            } catch ( SQLException e ) {
	                e.printStackTrace();
	            }
	      }
	}
	
	return null;
    }		
    /** 
     * @param Where Hier nur Where geben wenn eine Bedingung vorhanden
     * @param Aktiv Hier soll nur gegeben werden wenn Where in Where steht; Pfuefen ob aktiv gechecked
     * @param ID	Hier soll nur gegeben werden wenn Where in Where steht; Pfuefen ob aktiv
     * @return Arraylist von den Je nach Parameter aktiv oder inaktiv gesetzten Musiktitel mit der richtigen ID
     */
    private static ArrayList getMusiktitel(String Where,String Aktiv,String ID)
    {	
    	
    	Connection con = null;
	try {
		con = DriverManager.getConnection(
		  "jdbc:hsqldb:file:Musikdatenbank/hsql; shutdown=true", "root", "" );
		Statement stmt = con.createStatement();
    	String sql = "SELECT * FROM Musiktitelliste" +Where+ Aktiv + ID;// hier ist die selbe methode mit mehr Variabilit舩
    	ResultSet RSW = stmt.executeQuery(sql);
    	return extract(RSW);
    			
    	}
		catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
		}
		finally
	    {
	      if ( con != null )
	      {
	        try {
	            con.close();
	            } catch ( SQLException e ) {
	                e.printStackTrace();
	            }
	      }
	}
	
	return null;
				
}
    private static ArrayList getMusiktitel(String Where,String Aktiv,String ID,String Order)
    {	
    	
    	Connection con = null;
	try {
		con = DriverManager.getConnection(
		  "jdbc:hsqldb:file:Musikdatenbank/hsql; shutdown=true", "root", "" );
		Statement stmt = con.createStatement();
    	String sql = "SELECT * FROM Musiktitelliste" +Where+ Aktiv + ID+" "+Order;// hier ist die selbe methode mit mehr Variabilit舩
    	ResultSet RSW = stmt.executeQuery(sql);
    	if (RSW != null)
    	{
    	return extract(RSW);
    	}
    	else
    	{
    		String sql1 = "SELECT * FROM Musiktitelliste Where Aktiv = true and ID =1";// hier ist die selbe methode mit mehr Variabilit舩
    	ResultSet RSW1 = stmt.executeQuery(sql);
    	return extract(RSW1);
    	}
    	}
		catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
		}
		finally
	    {
	      if ( con != null )
	      {
	        try {
	            con.close();
	            } catch ( SQLException e ) {
	                e.printStackTrace();
	            }
	      }
	}
	
	return null;
				
}
    /**
     * 	Sucht die Bestimmte Reihe in der Datenbank
     * @param ID Angabe der gesuch ID
     * @return Gib die Arrayliste zu der Passenden ID Nummer
     */
    private static ArrayList getWiedergabeliste(int ID)
    {	
    	Connection con = null;								
    	try {
			con = DriverManager.getConnection(
			  "jdbc:hsqldb:file:Musikdatenbank/hsql; shutdown=true", "root", "" );
			Statement stmt = con.createStatement();
	    	String sql = "SELECT * FROM WIEDERGABELISTEN";
	    	ResultSet RSW = stmt.executeQuery(sql + " Where ID ="+ID ); // Abfrage nach der ID
	    	return extract(RSW);
	    			
	    	}
    		catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
    		}
			finally
		    {
		      if ( con != null )
		      {
		        try {
		            con.close();
		            } catch ( SQLException e ) {
		                e.printStackTrace();
		            }
		      }
		}
		return null;
		
    				
    }
    /**
     * Diese Methode ist als private deklariert und gibt anderen Methoden die ganze Datenbank zurueck
     * @return gibt als Arrayliste die ganze Datenbank zurück
     */
    private static ArrayList getWiedergabeliste() 
    {	
    	Connection con = null;
    	try {
			con = DriverManager.getConnection(
			  "jdbc:hsqldb:file:hello_lib/Musikdatenbank/hsql; shutdown=true", "root", "" );
			Statement stmt = con.createStatement();
	    	String sql = "SELECT * FROM WIEDERGABELISTEN";//Abfrage ohne Where Bedingung
	    	ResultSet RSW = stmt.executeQuery(sql);
	    	return extract(RSW);
	    			
	    	}
    		catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
    		}
			finally
		    {
		      if ( con != null )
		      {
		        try {
		            con.close();
		            } catch ( SQLException e ) {
		                e.printStackTrace();
		            }
		      }
		}
		return null;
		
    				
    }
    /**
     * @author The Gooter ([url=http://www.coderanch.com/t/460815/JDBC/java/Making-arraylist-resultset]Making arraylist from resultset (JDBC forum at JavaRanch)[/url] )
     * 	Resultset koennen nicht einfach verarbeitet werden deshalb werden diese hier zur Arraylist umgewandelt
     * @param resultSet Hier wird von alle antworten von den Datenbanken eingeladen
     * @return aus den Resultsets wird eine Arraylist als return generiert
     * @throws SQLException
     */
    private static ArrayList<ArrayList<String>> extract(ResultSet resultSet)
    throws SQLException {  
        ArrayList<ArrayList<String>> table;  
        int columnCount = resultSet.getMetaData().getColumnCount();  
          
        if(resultSet.getType() == ResultSet.TYPE_FORWARD_ONLY)   
            table = new ArrayList<ArrayList<String>>();  
        else {    
            resultSet.last();  
            table = new ArrayList<ArrayList<String>>(resultSet.getRow());  
            resultSet.beforeFirst();  
        }  
    
        for(ArrayList<String> row; resultSet.next(); table.add(row)) {  
            row = new ArrayList<String>(columnCount);  
      
            for(int c = 1; c <= columnCount; ++ c)  
                row.add(resultSet.getString(c).intern());  
        }  
          
        return table;  
    } 
	/** 
	 * fuer die Spiele oder andere anwendungen
	 * @param SPIELJANEIN angeben um bei False für normale anwendungen die Tabelle zu verlangen und bei true fuer das spiel
	 * @return returnt ein String[][] an die anderen Methoden Groeße [variable][10]
	 */
	public static String[][] getStringsMusiktite(Boolean SPIELJANEIN)
	{	
		ArrayList blu = null;			//Die Arrayliste wird hier in eine String[][] umgewandelt
		if (SPIELJANEIN==false)			// um es sp舩er besser zu nutzen
		
		{								//Abfrage zum Klaeren ob es Fuer spiel oder Tabelle ist
			blu = getMusiktitel();
		}
		else
		{ 
			blu =getMusiktitelSpiel();
		}
		
		String Strings="";
		String Indexs="";
		String URLS="";
		String Titel="";
		String Names="";
		String Album="";
		String Interpret="";
		String Jahr="";
		String SpielJaNein="";
		String Aktiv="";
		String IDWIEDER="";
		String Datei="";
		String[][] StringArray= new String[blu.size()][11];
		int zwischen= 0;
		int anfang=0;
	
		boolean AKTIV=false;
		ArrayList blu2= new ArrayList();
		int leange=0;
		for (int x = 0; x<blu.size();x++)
		{	anfang=0;
			blu2= (ArrayList) blu.get(x);
			Strings = blu2.toString();
			leange = Strings.length();
			Strings = Strings.substring(1, leange - 1);
			
			Indexs= Strings.substring(anfang, Strings.indexOf(",", anfang) );
			anfang=Strings.indexOf(",", anfang)+1;
			Album=Strings.substring(anfang+1, Strings.indexOf(",", anfang) );
			anfang=Strings.indexOf(",", anfang)+1;
			Interpret=Strings.substring(anfang+1, Strings.indexOf(",", anfang) );
			anfang=Strings.indexOf(",", anfang)+1;
			Jahr=Strings.substring(anfang+1, Strings.indexOf(",", anfang) );
			anfang=Strings.indexOf(",", anfang)+1;
			Names=Strings.substring(anfang+1, Strings.indexOf(",", anfang) );
			anfang=Strings.indexOf(",", anfang)+1;
			SpielJaNein=Strings.substring(anfang+1, Strings.indexOf(",", anfang) );
			anfang=Strings.indexOf(",", anfang)+1;
			URLS=Strings.substring(anfang+1, Strings.indexOf(",", anfang) );
			anfang=Strings.indexOf(",", anfang)+1;
			Aktiv=Strings.substring(anfang+1, Strings.indexOf(",", anfang) );
			anfang=Strings.indexOf(",", anfang)+1;
			IDWIEDER=Strings.substring(anfang+1, Strings.indexOf(",", anfang) );
			anfang=Strings.indexOf(",", anfang)+1;
			Titel=Strings.substring(anfang+1, Strings.length() );
			//anfang=Strings.indexOf(",", anfang)+1;
			//Datei=Strings.substring(anfang+1, Strings.length() );
			Integer Size =blu.size();
			StringArray[0][0]= Size.toString();
			StringArray[x][1]=Indexs;
			StringArray[x][2]=Titel;
			StringArray[x][3]=Album;
			StringArray[x][4]=Interpret;
			StringArray[x][5]=Jahr;
			StringArray[x][6]=Names;
			StringArray[x][7]=SpielJaNein;
			StringArray[x][8]=URLS;
			StringArray[x][9]=Aktiv;
			StringArray[x][10]=IDWIEDER;
			
			
			
		}
		return StringArray;
		}	
		
	 * @param IDWiedergabeliste
	 * @return
	 */
	private static ArrayList getMusiktitel (String IDWiedergabeliste)
	    {	//Hier werden die Musiktitel nach der Wiedergabeliste gesucht
		
	    	Connection con = null;
		try {
			con = DriverManager.getConnection(
			  "jdbc:hsqldb:file:Musikdatenbank/hsql; shutdown=true", "root", "" );
			Statement stmt = con.createStatement();
	    	String sql = "SELECT * FROM Musiktitelliste Where IDWIEDERGABELISTE = "+IDWiedergabeliste;
	    	ResultSet RSW = stmt.executeQuery(sql);
	    	return extract(RSW);
	    			
	    	}
			catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			}
			finally
		    {
		      if ( con != null )
		      {
		        try {
		            con.close();
		            } catch ( SQLException e ) {
		                e.printStackTrace();
		            }
		      }
		}
		
		return null;
	    }
	/**
	 * @param b
	 * @return
	 */
	private static String[][] getStringsoutofArraylistwieder(ArrayList b){
		ArrayList blu = b;								//Hier wird eine bestimmt Arraylist
		String Strings="";								//in String[][] umgewandelt ohne
		String Indexs="";								// eine andere Methode aufzurufen
		String URLS="";									// Da Daten per Parameter uebergeben werden
		String AKTStrin="";
		String Names="";
		String[][] StringArray= new String[blu.size()][5];
		int zwischen= 0;
		int anfang=0;
		
		boolean AKTIV=false;
		ArrayList blu2= new ArrayList();
		int leange=0;
		for (int x = 0; x<blu.size();x++)
		{	anfang=0;
			blu2= (ArrayList) blu.get(x);
			Strings = blu2.toString();
			leange = Strings.length();
			Strings = Strings.substring(1, leange - 1);
			
			Indexs= Strings.substring(anfang, Strings.indexOf(",", anfang) );
			anfang=Strings.indexOf(",", anfang)+1;
			Names=Strings.substring(anfang+1, Strings.indexOf(",", anfang) );
			anfang=Strings.indexOf(",", anfang)+1;
			URLS=Strings.substring(anfang+1, Strings.indexOf(",", anfang) );
			anfang=Strings.indexOf(",", anfang)+1;
			AKTStrin=Strings.substring(anfang+1, Strings.length() );
			
			StringArray[x][1]=Indexs;
			StringArray[x][2]=Names;
			StringArray[x][3]=URLS;
			StringArray[x][4]=AKTStrin;
		}
		zwischen= blu.size();
		if (blu.size()>0){
		StringArray[0][0]= String.valueOf(zwischen);
		}
		return StringArray;
		
	}
	
	
}

Fehlermeldung ist: (siehe Anhang)


ich bedanke mich bei euch schon im Vorraus
 

Anhänge

  • Fehler.jpg
    Fehler.jpg
    99 KB · Aufrufe: 22
Zuletzt bearbeitet von einem Moderator:
Du musst natürlich auch den Treiber (jar-Datei) mit exportieren. Schau doch mal in deiner jar nach, ob die Treiberdatei dort überhaupt drin ist.
 
Hallo,
es steht in der Libary mit drin

es sicht in Eclipse so aus

der Treiber ist in der Libary mit drin welche als interne jar geladen wird
 

Anhänge

  • Unbenannt2.jpg
    Unbenannt2.jpg
    118,8 KB · Aufrufe: 22
Zuletzt bearbeitet von einem Moderator:
Ja, aber das gilt dann nur für Eclipse. Du musst die Treiberdatei (jar) dort auch noch dem Build Path hinzufügen. Mach mal ein Rechtsklick auf die Datei und so etwas wie "add to buildpath". Dann müsste der Treiber beim Erstellen des executable jar dort mit eingebunden werden.
 
Es ist auch schon per rechtklick eingefügt worden, hab auf die libary gehtsklick gedrück und auf build path, aber so klappt es auch nicht
 

Anhänge

  • Unbenannt3.jpg
    Unbenannt3.jpg
    120,5 KB · Aufrufe: 21
Zuletzt bearbeitet von einem Moderator:
OK, beim export als runnable jar file kannst du noch festlegen, wo und wie diese externe jars eingebunden werden. Sind die mit in deiner jar-Datei drin? Vielleicht kannst du mal mit einem Packprogramm die jar öffnen und reinschauen.
 

Zurück
Oben