2011-01-24 16 views
4

我试图从Web应用程序(的Tomcat的5.5.x)中读取一个CSV文件,我得到的是“FileNotFoundExceptions的:如何使用H2的CSVREAD()函数/查询访问WAR中的CSV文件?

dbStatement.executeQuery("SELECT * FROM CSVREAD('csvfile.csv');"); 

我不认为我可以/需要指定一个绝对路径(它将被部署到我无法访问的Linux/Tomcat服务器中),并且不确定需要的文件协议('jar:file',classpath:等)。

的文件是在 “**/WEB-INF /班/ csvfile.csv”

上我需要传递给CSVREAD()路径的结构,任何想法?

感谢

丰富

回答

2

也许你可以尝试建立动态查询,第一检索与ServletContext.getRealPath("/WEB-INF/classes/csvfile.csv")的完整路径。

+0

这是按照记录,谢谢! JFYI,为了访问ServletContext,我必须实现Spring的'org.springframework.web.context.ServletContextAware'接口。我的业务类是一个带注释的POJO,用于创建Web服务,因此不直接涉及Servlet子类。再次感谢。 – 2011-01-25 11:00:38

1

H2目前不支持从类路径加载文件。但是,你应该能够使用获取资源的URL:

String url = getClass().getClassLoader().getResource("csvfile.csv").toString(); 

然后你就可以使用这个URL(在我的情况下,它开始与URL“文件”)如下:

dbStatement.executeQuery("SELECT * FROM CSVREAD('" + url + "');"); 

(但我没有在网络应用程序中测试)

+0

我猜这个类可能是在不同的子目录中(例如`sun/jdbc/odbc`)或者.jar中的资源所在的位置,这会阻止使用getClassLoader()来查找正确的目录名称。 – pascal 2011-01-25 09:07:52

相关问题