HSQLDB

2010-02-19 10 views
7

के साथ तालिकाओं को बनाने के लिए एक स्क्रिप्ट चलाकर मैं hsqldb का उपयोग करता हूं ताकि मेरे यूनिट परीक्षणों को चलाने के लिए डेटाबेस एक्सेस की आवश्यकता हो।HSQLDB

क्षण के लिए, जब मैं एक विशेष परीक्षा के लिए एक मेज बनाना चाहते हैं, मैं निम्नलिखित कोड है:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> 
    <property name="url" value="jdbc:hsqldb:mem:memoryDB"/> 
    <property name="username" value="SA"/> 
    <property name="password" value=""/> 
</bean> 
:

private void createTable() { 
    PreparedStatement ps; 
    try { 
     ps = getConnection().prepareStatement("CREATE TABLE T_DATE (ID NUMERIC PRIMARY KEY, DATEID TIMESTAMP)"); 
     ps.executeUpdate(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

getConnection() विधि एक डेटास्रोत एक Spring संदर्भ में परिभाषित पुनः प्राप्त

अब, मैं अपनी तालिका को SQL स्क्रिप्ट से बनाना चाहता हूं (बेशक, इस स्क्रिप्ट में एक से अधिक टेबल निर्माण होंगे):

CREATE TABLE T_DATE_FOO (ID NUMERIC PRIMARY KEY, DATEID TIMESTAMP); 
CREATE TABLE T_DATE_BAR (ID NUMERIC PRIMARY KEY, DATEID TIMESTAMP); 
... 

मैंने एचएसक्यूएलडीबी दस्तावेज में देखा है कि मैं उसे run a script at the startup से पूछ सकता हूं। हालांकि, यह मेरी आवश्यकताओं को पूरा नहीं करता है, क्योंकि मैं रनटाइम पर एक स्क्रिप्ट चलाने के लिए चाहता हूं।

बेशक, मैं स्वयं फ़ाइल को पढ़ सकता हूं, और प्रत्येक SQL कथन के लिए, मैं ps.executeUpdate() कमांड चलाता हूं, लेकिन मैं इस तरह के समाधान का उपयोग नहीं करना चाहता (सिवाय इसके कि कोई अन्य समाधान नहीं है)।

कोई विचार?

उत्तर

2

क्योंकि आप पहले से ही वसंत का उपयोग कर रहे हैं, तो आप SimpleJdbcUtils.executeSQLScript विधि का उपयोग करना चाहेंगे जो SQL स्क्रिप्ट निष्पादित करता है जहां कथन अर्धविराम से अलग होते हैं। यह कक्षा वसंत-परीक्षण मॉड्यूल (जेएआर) में है।

+0

यह काम कर रहा है, धन्यवाद! हालांकि, मुझे समझ में नहीं आता क्यों वसंत कई लाइनों में एक बयान देने से इनकार करता है (यहां तक ​​कि अंत में ';' के साथ भी ... – romaintaz

+1

जो निष्पादित करता है स्क्लस्क्रिप्ट विधि का उपयोग आप करते हैं? कार्यान्वयन में एक अंतर है –

0

मुझे एक ही समस्या थी। मैंने पाठ फ़ाइल को विभाजित कर दिया; और प्रत्येक कथन को अलग से निष्पादित करना। यह ठीक था क्योंकि हमारे पास कोई आवेषण नहीं था इसलिए बयान के अंदर कोई अर्धविराम नहीं था। मुझे उस समय एक एसक्यूएल स्क्रिप्ट चलाने का आसान तरीका नहीं मिला है

+0

मेरे मामले में, विभाजन स्क्रिप्ट आसान हो जाएगी, क्योंकि स्क्रिप्ट वास्तव में जटिल नहीं हैं और इसमें कोई विशिष्ट वर्ण नहीं हैं। हालांकि, अगर यह मौजूद है तो मैं वास्तव में बेहतर समाधान पसंद करूंगा ... – romaintaz

1

सबसे पहले, मुझे इसके प्रभाव नहीं पता हैं। मैंने इसे लंबे समय तक इस्तेमाल किया, यह मेरे लिए काम करता था। SQLExec वर्ग ant.jar से है, तो आप शायद अपनी खुद की उपयोगिता वर्ग बनाने के लिए चींटी स्रोत पर गौर कर सकते,

SQLExec sqlExec=new SQLExec(); 
sqlExec.setUserid("user"); 
sqlExec.setPassword("passowrd"); 
sqlExec.setUrl("jdbc:mysql://localhost:3306/dbname"); 
sqlExec.setDriver("com.mysql.jdbc.Driver"); 
sqlExec.setProject(new Project()); 
sqlExec.setSrc(new File("c:/test.sql")); 
sqlExec.execute(); 
4

आप org.hsqldb.util.SqlFile आजमाइए हो सकता है। यह वर्ग आपकी समस्या के लिए एक आदर्श मैच प्रतीत होता है।

संबंधित मुद्दे