1

I have tried to make assets folder in different locations in the project and I have MS Access DB file in it. I want to access it using ucanaccess driver. but it gives file not found exception.

DB connectivity code.

 public static Statement getConnectionStatement(){
    try {
        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");

        String url = "jdbc:ucanaccess://.\\assets\\BC190201004.accdb";

        connection = DriverManager.getConnection(url);

        return connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                ResultSet.CONCUR_UPDATABLE);
    } catch (ClassNotFoundException | SQLException e) {
        e.printStackTrace();
        return null;
    }
}

but with this code, it is working fine

        String url = "jdbc:ucanaccess://C:\\Users\\kha33\\NetBeansProjects\\CS506-Assignment-3\\src\\main\\webapp\\WEB-INF\\assets\\BC190201004.accdb";

I tried to put assets folder under the project main folder, java folder, webapp folder and WEB-INF folder.

I also tried in NetBeans IDE.

Carcigenicate
  • 39,675
  • 9
  • 62
  • 99
Usman Khan
  • 23
  • 8

1 Answers1

0

The path .\assets\BC190201004.accdb you use to access your file is relative to the working directory of Tomcat's process. That is usually $CATALINA_BASE, but can be anything (especially under an IDE).

You should give the path in a more stable way, e.g. by using ServletContext#getRealPath():

public static Statement getConnectionStatement(ServletContext ctx){
    ...
    final String realPath = ctx.getRealPath("/WEB-INF/assets/BC190201004.accdb");
    final String url = "jdbc:ucanaccess://" + realPath;
    ...
}

Obviously this will fail if your Tomcat does not unpack WARs. However, that is not a common situation.

Piotr P. Karwasz
  • 9,386
  • 2
  • 9
  • 31