2011-12-14 55 views
0

我試圖在Eclipse中將Java項目保存爲jar文件。無法從.jar文件連接到數據庫

由於我正在使用Access數據庫,我應該導出所有內容,因此我決定將數據庫文件包含在與Main.classSingletonConnection.class(這是管理與數據庫的連接的類)的文件夾中。

因此,代碼爲:

private SingletonConnection()throws ConnessioneException{ 

    idConnection = "root"; 
    passConnection = ""; 

    String slash="\\"; 
    String path=this.getClass().getResource("").getPath().replaceFirst("^.*:", "").replaceFirst("!.*$", "").replace("/", slash.concat("\\")); 

    System.out.println("path è "+path); 

    driverConnection = "sun.jdbc.odbc.JdbcOdbcDriver"; 
    stringConnection = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=C:"+path+"eventi.mdb"; 


    try { 
     Class.forName(driverConnection); 
     conn = DriverManager.getConnection(stringConnection,idConnection,passConnection); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     throw new ConnessioneException(); 
    } 
} 

public static Connection getInstance()throws ConnessioneException{ 
    if(conn==null) 
     new SingletonConnection(); 

    return conn; 
} 

在Eclipse中一切正常。該項目工作並沒有例外,但是當我嘗試將項目導出爲Runnable Jar File或Jar File時,它始終返回ConnessioneException =null,因此與db的連接失敗。

的例外是在該方法中的getInstance給定,線「新SingletonConnection()」

我需要在其他PC運行該程序,所以我需要解決。我無法繼續使用Eclipse。

+2

什麼是堆棧跟蹤?是包含在jar文件中的ODBC驅動程序? – Thilo 2011-12-14 11:15:28

回答

0

解決:也許它可以成爲有用的人:

*** import org.apache.commons.io.IOUtils; !! (package: commons-io-2.1.jar) 

    idConnection = "root"; 
    passConnection = ""; 

    String slash="\\"; 
    String path=null; 

    String temp=System.getProperty("java.io.tmpdir"); 
    if (!(temp.endsWith("/") || temp.endsWith("\\"))) 
      temp = temp + System.getProperty("file.separator"); 
    File tempDir = new File(temp); 
    File temporaryFile = new File(tempDir, "templateCopy.mdw"); 
    InputStream templateStream = getClass().getResourceAsStream("eventi.mdw"); 
    try { 
     IOUtils.copy(templateStream, new FileOutputStream(temporaryFile)); 

    } catch (FileNotFoundException e1) { 
     e1.printStackTrace(); 
     //Dialog d1=new Dialog("filenotfound"); 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
     //Dialog d2=new Dialog("io"); 
    }catch (Exception e1){ 
     //Dialog d3=new Dialog("general"); 
    } 

    path = temporaryFile.getAbsolutePath(); 

    driverConnection = "sun.jdbc.odbc.JdbcOdbcDriver"; 
    stringConnection = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ="+path; 


    try { 
     Class.forName(driverConnection); 
     conn = DriverManager.getConnection(stringConnection,idConnection,passConnection); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     throw new ConnessioneException(e.getStackTrace()); 
    }