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')に例が示されていても、Sean Patrick Floydは先頭のスラッシュを削除することを提案しました。

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

これは機能しています!

于 2011-03-29T15:25:01.347 に答える