2011-03-29 16 views
8

के लिए क्लासपाथ में स्थित लोड सीएसवी फ़ाइल परीक्षण उद्देश्यों के लिए, मैं एसक्यूएल स्क्रिप्ट्स के साथ-साथ सीएसवी फाइलों का उपयोग करके कुछ टेबल बनाना और भरना चाहता हूं।एच 2 डाटाबेस

तो मैं इस तरह एक SQL स्क्रिप्ट बनाया:

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

foo.csv फ़ाइल मौजूद है, और src/test/resources में स्थित है।

इस स्क्रिप्ट ग्रहण (जहां 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 

क्या मैं गलत क्या किया? एक CSV फ़ाइल लोड करने के लिए सही ढंग से classpath: प्रोटोकॉल का उपयोग कैसे करें?

यदि मैं फ़ाइल के लिए पूरा पथ डालता हूं (जैसे ... CSVREAD('C:\my-project\src\test\resources\foo.csv');), तो यह काम करता है। लेकिन ऐसा इसलिए नहीं है कि मैं ऐसा करना चाहता हूं :)

ध्यान दें कि मैं H2 (1.3.153) के नवीनतम संस्करण का उपयोग I wanted to use the classpath: protocol to load my file के रूप में करता हूं।

उत्तर

10

भी the official docs अगर CSVREAD('classpath:/org/acme/data/address.csv') उदाहरण दे, Sean Patrick Floyd अग्रणी स्लैश, अर्थात होने को दूर करने का सुझाव दिया:

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

और इस काम कर रहा है!

+0

एचएम, तब एक बग की तरह लगता है ... मैं जांच करूंगा। –

+0

@ थॉमस म्यूएलर धन्यवाद :) – romaintaz