如何使用H2的CSVREAD()函数/查询访问WAR中的CSV文件?

时间:2011-01-24 17:12:28

标签: java sql database csv h2

我正在尝试从Web应用程序(Tomcat 5.5.x)中读取CSV文件,而我得到的只是'FileNotFoundExceptions':

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

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

该文件位于“** / WEB-INF / classes / csvfile.csv”

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

由于

2 个答案:

答案 0 :(得分:2)

也许您可以尝试动态构建查询,首先使用ServletContext.getRealPath("/WEB-INF/classes/csvfile.csv")检索完整路径。

答案 1 :(得分:1)

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

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

然后您可以使用此URL(在我的情况下,它是以“file:”开头的URL),如下所示:

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

(但我没有在网络应用中对此进行测试)