10

出于测试目的,我想使用 SQL 脚本和 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 ),因为我想使用该classpath:协议来加载我的文件

4

2 回答 2

15

即使官方文档给出了CSVREAD('classpath:/org/acme/data/address.csv')例子,肖恩帕特里克弗洛伊德建议删除前导斜杠,即:

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

这是有效的!

于 2011-03-29T15:25:01.347 回答
0

对上述答案的更新。

我尝试了上面提供的解决方案,但是我仍然收到错误,然后我尝试了下面的并且它有效。

Create table tblcountry as select * from CSVREAD('classpath:/country.csv');

H2 数据库文档需要更新。

于 2020-10-02T19:18:08.647 回答