Rom*_*las 9 java testing h2 in-memory-database
出于测试目的,我想使用SQL脚本和CSV文件创建和填充一些表.
所以我创建了一个像这样的SQL脚本:
CREATE TABLE T_FOO (
...
) as select * from CSVREAD('classpath:/foo.csv');
Run Code Online (Sandbox Code Playgroud)
该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
Run Code Online (Sandbox Code Playgroud)
我做错了什么?如何正确使用classpath:协议加载CSV文件?
如果我把文件的完整路径(如... CSVREAD('C:\my-project\src\test\resources\foo.csv');),那么它的工作原理.但这不是我想做的原因:)
请注意,我使用最新版本的H2(1.3.153),因为我想使用该classpath:协议加载我的文件.
Rom*_*las 12
即使官方文档给出的CSVREAD('classpath:/org/acme/data/address.csv')例子中,肖恩·帕特里克·弗洛伊德建议删除前导斜线,即具有:
CREATE TABLE T_FOO (
...
) as select * from CSVREAD('classpath:foo.csv');
Run Code Online (Sandbox Code Playgroud)
这是有效的!