2011-01-02 14 views
14

मैं एक वसंत अनुप्रयोग (परीक्षण के लिए) में एक एम्बेडेड डेटाबेस के रूप में HSQLDB का उपयोग करने की कोशिश कर रहा हूं। चूंकि लक्ष्य उत्पादन डेटाबेस ओरेकल है, इसलिए मैं एचएसक्यूएलडीबी ओरेकल सिंटैक्स मोड सुविधा का उपयोग करना चाहता हूं।ओरेकल क्वेरी सिंटैक्स मोड में HSQLDB का उपयोग कैसे करें?

SET DATABASE SQL SYNTAX ORA TRUE;

हालांकि, जब अपने परीक्षण चल रहा है, मैं निम्नलिखित त्रुटि मिलती है:

स्प्रिंग config में मैं

<jdbc:embedded-database type="HSQL" id="dataSource"> 
</jdbc:embedded-database> 

<jdbc:initialize-database data-source="dataSource" enabled="true"> 
    <jdbc:script location="classpath:schema.sql"/> 
</jdbc:initialize-database> 

और शीर्ष मैंने लिखा पर schema.sql में उपयोग

java.sql.SQLException: Unexpected token: DATABASE in statement [SET DATABASE SQL SYNTAX ORA TRUE]

क्या यह एक वाक्यविन्यास त्रुटि या अनुमति त्रुटि या कुछ पूरी तरह से अलग है?

धन्यवाद - किसी भी पॉइंटर्स के लिए भी जो उत्तर का कारण बन सकता है।

यह देखते हुए कि एचएसक्यूएल जेडीबीसी के लिए स्प्रिंग डिफॉल्ट है: एम्बेडेड-डेटाबेस और लक्ष्य दिया गया ओरेकल है, यह परिदृश्य वास्तव में बहुत आम होना चाहिए। हालांकि, मुझे इस मुद्दे को छूने के लिए वेब पर कुछ भी नहीं मिला।

अद्यतन:

मुद्दा ऊपर # 1 जवाब देने के लिए धन्यवाद हल हो गई है।

हालांकि, मैं अब एक और अपवाद:

org.springframework.dao.DataAccessResourceFailureException: Failed to populate database; nested exception is java.sql.SQLException: java.lang.RuntimeException: unsupported internal operation: StatementCommand unsupported internal operation: StatementCommand

क्या इस के कारण होता है किसी भी विचार?

+0

क्या तुमने कभी StatementCommand त्रुटि के लिए एक समाधान मिला? मैं अब एक ही नाव में हूँ। –

+0

ओरेकल संगतता मोड के साथ, H2 डीबी का उपयोग क्यों न करें? – ebaxt

उत्तर

10

यह विकल्प एचएसक्यूएलडीबी 2.0 के साथ पेश किया गया था।

क्या आप वाकई सही संस्करण का उपयोग कर रहे हैं?
हो सकता है कि आपके पास कहीं भी क्लासपाथ में 1.8 है।

लेकिन यह आपको किसी भी तरह से परीक्षण के मामले में दूर नहीं ले जाएगा, क्योंकि यह केवल कुछ बुनियादी वाक्यविन्यास "प्रतिस्थापन" पर बदल जाता है, यहां कोई वास्तविक व्यवहार परिवर्तन नहीं है (और मैं अधिक उन्नत ओरेकल के बारे में भी बात नहीं कर रहा हूं विश्लेषणात्मक कार्यों, कनेक्ट या कुछ समान जैसी विशेषताएं)।

डीबीएमएस के साथ अपने आवेदन का परीक्षण करना बहुत ही अच्छा विचार है जिसका उत्पादन में उपयोग नहीं किया जाएगा। यह सिर्फ एक वैध परीक्षण नहीं है।

<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource"> 
    <property name="driverClassName" value="org.hsqldb.jdbcDriver" /> 
    <property name="url" value="jdbc:hsqldb:mem:PUBLIC;sql.syntax_ora=true" /> 
    <property name="username" value="sa" /> 
    <property name="password" value="" /> 
</bean> 
+0

आह, धन्यवाद। हाँ - मैं 1.7 पर था। मैं परीक्षण पर आपके साथ सहमत हूं - हालांकि, मेरे मामले में यह डीबी का बहुत ही मामूली उपयोग है। –

+2

2.0 मेरे लिए काम नहीं करता है, मुझे नए संस्करण का उपयोग करना था, (2.2.8) – banterCZ

+0

2.2।4 मेरे लिए भी काम नहीं किया (+1 बटर सीजेड, धन्यवाद!) मैं 2.2.8 तक भी अपग्रेड किया गया ... यह या तो अपग्रेड था या http://stackoverflow.com/questions/4628857/junit-hsqldb-how ऑरैक-सिंटैक्स-जब-परीक्षण-उपयोग-एचएसक्यू जोड़ना; sql.syntax_ora = यूआरएल –

7

यहां तक ​​कि अगर यह केवल कुछ बुनियादी वाक्यविन्यास यहां नहीं बदल कैसे आप यह कर सकते का एक उदाहरण है। अधिक व्यवहार संगतता के लिए अतिरिक्त गुणों का उपयोग किया जा सकता है। ये HSQLDB गाइड में दर्ज कर रहे हैं:

http://hsqldb.org/doc/2.0/guide/compatibility-chapt.html#coc_compatibility_oracle

+1

यह jdbc होना चाहिए: hsqldb: mem: सार्वजनिक: sql.syntax_ora = true। – mrembisz

+0

अपडेट किया गया। धन्यवाद – borjab

+0

@borjab आप अभी भी अल्पविराम या अर्धविराम का उपयोग करने के लिए अलग हैं –

0

sql.syntax_ora=true यूआरएल संपत्ति नंबर लिखें और दोहरी तालिका सहित, वाक्य रचना संगतता सक्षम बनाता है:

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