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
  • 43,494
  • 9
  • 68
  • 117
Usman Khan
  • 80
  • 9

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
  • 12,857
  • 3
  • 20
  • 43