2011-12-14 3 views
0

Java 프로젝트를 jar 파일로 Eclipse에 저장하려고합니다..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; 
} 

이클립스에서 모든 것이 괜찮습니다. 프로젝트가 작동하고 예외는 없지만 프로젝트를 Runnable Jar 파일 또는 Jar 파일로 내보낼 때 항상 ConnessioneException =null을 반환하므로 db에 대한 연결이 실패합니다.

예외는 메소드의 getInstance에 나와 줄 "새로운 SingletonConnection()"

내가 다른 PC에 해당 프로그램을 실행해야합니다, 그래서 그 해결해야합니다. Eclipse를 계속 사용할 수 없습니다.

+2

스택 트레이스는 무엇입니까 : 어쩌면 누군가를 위해 도움이 될 수 있습니까? jar 파일에 ODBC 드라이버가 포함되어 있습니까? – Thilo

+2

그냥 몇 가지 조언, 잡을하지 마십시오 (예외 e) ... 던져 새로운 ConnessioneException(); 항상 새로운 ConnessioneException ("catch Exception", e)과 같은 것을하십시오. 따라서 스택 추적에 항상 예외의 근본 원인이 있습니다. –

+0

Matthew에게 조언 해 주셔서 감사합니다. 그러나 Thilo는 내가 운전자를 포함하지 않는다고 말했습니다. 그래서 나는 그것을 어떻게 수행 할 것인가에 대해 조사하고 있습니다. ^^ –

답변

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()); 
    } 
관련 문제