Загрузите файл CSV, расположенный в пути к классам для базы данных H2.

В целях тестирования я хочу создать и заполнить некоторые таблицы, используя сценарии 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: для загрузки моего файла.


person Romain Linsolas    schedule 29.03.2011    source источник


Ответы (2)


Даже если официальная документация приводит CSVREAD('classpath:/org/acme/data/address.csv') пример, Шон Патрик Флойд предложил удалить косую черту в начале, т.е. иметь:

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

и это работает!

person Romain Linsolas    schedule 29.03.2011
comment
Хм, тогда звучит как ошибка... Я проверю. - person Thomas Mueller; 29.03.2011

Обновление к приведенному выше ответу.

Я попробовал решение, представленное выше, однако я все еще получал сообщение об ошибке, затем я попробовал следующее, и оно работает.

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

Документ базы данных H2 необходимо обновить.

person Vineeth Maller    schedule 02.10.2020