2011-03-29 43 views
8

出於測試目的,我想使用SQL腳本以及CSV文件創建和填充一些表格。加載位於H2數據庫的類路徑中的CSV文件

所以我創建了一個SQL腳本,像這樣的:

CREATE TABLE T_FOO (
    ... 
) as select * from CSVREAD('classpath:/foo.csv'); 

foo.csv文件存在,並且位於src/test/resources

當這個腳本是基於Eclipse(其中src/test/resources被定義爲源目錄,因此被包含在類路徑)運行時,我收到以下錯誤:

Caused by: java.io.FileNotFoundException: resource /foo.csv 
    at org.h2.store.fs.FileSystemDisk.openFileInputStream(FileSystemDisk.java:388) 
    at org.h2.util.IOUtils.openFileInputStream(IOUtils.java:708) 
    at org.h2.tools.Csv.initRead(Csv.java:317) 
    at org.h2.tools.Csv.readResultSet(Csv.java:217) 
    at org.h2.tools.Csv.read(Csv.java:193) 
    ... 49 more 

我做了什麼錯?如何正確使用classpath:協議加載CSV文件?

如果我把文件的完整路徑(如... CSVREAD('C:\my-project\src\test\resources\foo.csv');),那麼它的工作原理。但這並不是我爲什麼要這樣做:)

請注意,我使用最新版本的H2(1.3.153)作爲I wanted to use the classpath: protocol to load my file

回答

10

即使the official docsCSVREAD('classpath:/org/acme/data/address.csv')例如,Sean Patrick Floyd建議刪除前導斜線,即具有:

CREATE TABLE T_FOO (
    ... 
) as select * from CSVREAD('classpath:foo.csv'); 

,這是工作

+0

嗯,聽起來像一個bug然後...我會檢查。 – 2011-03-29 15:40:56

+0

@Thomas Mueller謝謝:) – romaintaz 2011-03-29 16:10:00

相關問題