2011-03-29 36 views
8

Para propósitos de pruebas, quiero crear y llenar algunas tablas usando scripts SQL así como también archivos CSV.Cargar archivo CSV ubicado en el classpath para la base de datos H2

así que creé una secuencia de comandos SQL como la siguiente:

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

existe el archivo foo.csv, y se encuentra en src/test/resources.

Cuando este script se ejecuta en Eclipse (donde src/test/resources se define como un directorio de origen y por lo tanto está incluido en la ruta de clase), me sale el siguiente error:

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 

¿Qué hice mal? ¿Cómo usar correctamente el protocolo classpath: para cargar un archivo CSV?

Si pongo la ruta completa del archivo (como ... CSVREAD('C:\my-project\src\test\resources\foo.csv');), entonces funciona. Pero no es por eso que quiero hacerlo :)

Tenga en cuenta que utilizo la última versión de H2 (1.3.153) como I wanted to use the classpath: protocol to load my file.

Respuesta

10

Incluso si the official docs dar el ejemplo CSVREAD('classpath:/org/acme/data/address.csv'), Sean Patrick Floyd sugirió que quitar la barra inicial, es decir, que presenta:

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

y esto se trabajando!

+0

Hm, suena como un error, entonces ... Lo comprobaré. –

+0

@Thomas Mueller Gracias :) – romaintaz

Cuestiones relacionadas