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.
Advertisement
Answer
The path .assetsBC190201004.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.