2011-12-14 2 views
0

Я пытаюсь сохранить проект Java в Eclipse как файл jar.Не удается подключиться к базе данных из файла .jar

Поскольку я работаю с базой данных Access, и я должен экспортировать все, я решил включить файл базы данных в ту же папку, что и Main.class, и SingletonConnection.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()»

мне нужно запустить эту программу на других компьютерах, так что мне нужно решить, что. Я не могу продолжать использовать Eclipse.

+2

Что такое StackTrace? является драйвером ODBC, включенным в файл jar? – Thilo

+2

Просто совет, никогда не поймайте (исключение e) ... запустите новый ConnessioneException(); Всегда делайте что-то вроде броска нового ConnessioneException («пойманное исключение», e); поэтому у вас всегда будет основная причина исключения в стеке. –

+0

спасибо за совет Мэтью .. однако, как сказал Тило, я не включил драйверы. Так что я googling о том, как это сделать ^^ –

ответ

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()); 
    } 
Смежные вопросы