Невозможно подключиться к базе данных из файла .jar - PullRequest
0 голосов
/ 14 декабря 2011

Я пытаюсь сохранить проект Java в Eclipse как файл 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, поэтому соединение с БД не удается.

Исключениев методе getInstance, строка «new SingletonConnection ()»

Мне нужно запустить эту программу на других ПК, поэтому мне нужно решить эту проблему.Я не могу продолжать использовать Eclipse.

1 Ответ

0 голосов
/ 19 декабря 2011

решено: может быть кому-то пригодится:

 ***   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());
    }
...