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

В целях тестирования я хочу создать и заполнить некоторые таблицы с использованием сценариев SQL, а также файлов CSV.

Поэтому я создал такой сценарий SQL:

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

Файл foo.csv существует и находится в src/test/resources.

Когда этот скрипт запускается в Eclipse (где src/test/resources определен как исходный каталог и, следовательно, включен в classpath), я получаюследующая ошибка:

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: длязагрузить мой файл .

1 Ответ

12 голосов
/ 29 марта 2011

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

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

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

...