2016-07-16 8 views
5

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

मैं निम्नलिखित विवरण

Type : HSQL Database Engine Standalone 
Driver: org.hsqldb.jdbcDriver 
URL: jdbc:hsqldb:file:mydb 
UserName: SA 
Password: SA 

का उपयोग कर डेटा बेस बनाया मेरे द्वारा बनाए गए वसंत विन्यास फाइल में "mydb" स्कीमा

तहत एल्बम नाम के एक मेज:

<bean id="jdbcTemplate" 
    class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"> 
    <constructor-arg ref="dbcpDataSource" /> 
</bean> 

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

और में मेरा वसंत नियंत्रक मैं कर रहा हूँ jdbcTemplate.query("SELECT * FROM MYDB.ALBUM", new AlbumRowMapper());

और यह मुझे अपवाद देता है:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [SELECT * FROM MYDB.ALBUM]; nested exception is java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: ALBUM 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

अगर मैं HSQLDB की एसक्यूएल संपादक के माध्यम से एक ही क्वेरी निष्पादित यह ठीक निष्पादित करता है। कृपा करके आप इस बारे में मेरी मदद कर सकते हैं।

+0

उपयोग करने के लिए बेहतर है, तो आप जो mydb बनाता है अपने SQL स्क्रिप्ट साझा कर सकते हैं होगा। चुनें * MYDB.ALBUM से चुनें * के बजाय ALBUM से चुनें। समस्या उपयोगकर्ता नाम और पासवर्ड के साथ हो सकती है। डिफ़ॉल्ट रूप से पासवर्ड उपयोगकर्ता नाम के साथ "sa" के रूप में खाली होता है, केस असंवेदनशील होता है। – Azim

उत्तर

3

user lacks privilege or object not found कई कारण हो सकते हैं, सबसे स्पष्ट यह है कि आप उस तालिका तक पहुंच रहे हैं जो मौजूद नहीं है। एक कम स्पष्ट कारण यह है कि, जब आप अपना कोड चलाते हैं, तो फ़ाइल डेटाबेस यूआरएल से कनेक्शन वास्तव में एक डीबी बना सकता है। जिस परिदृश्य का आप अनुभव कर रहे हैं, हो सकता है कि आपने एचएसक्यूएल डाटाबेस मैनेजर, अतिरिक्त टेबल और पंक्तियों का उपयोग करके डीबी सेट अप किया हो, लेकिन यह आपके जावा कोड का उपयोग करने वाला यह विशिष्ट उदाहरण नहीं है। आप यह जांचना चाह सकते हैं कि आपके पास इन फ़ाइलों की कई प्रतियां नहीं हैं: mydb.log, mydb.lck, mydb.properties, आदि आपके कार्यक्षेत्र में। यदि आपके जावा कोड ने उन फ़ाइलों को बनाया है, तो स्थान इस बात पर निर्भर करता है कि आप अपना प्रोग्राम कैसे चलाते हैं। नेटबेन्स के अंदर चल रहे एक मेवेन प्रोजेक्ट में उदाहरण के लिए, फाइलें pom.xml के साथ संग्रहीत होती हैं।

+0

मैं पीजीएसक्यूएल का उपयोग कर रहा था और एचएसक्यूएल के साथ परीक्षण चला रहा था। मैं एक सेवा का परीक्षण कर रहा था लेकिन एक और सेवा अभी भी पीजीएसक्यूएल डेटाबेस से जुड़ा हुआ था। यही कारण है कि मेरे लिए त्रुटि हुई: HSQL के साथ सेवा का परीक्षण करने का प्रयास करते समय PGSQL चल रहा है। PGSQL उदाहरण को रोकने के बाद, त्रुटि चली गई थी। – DraganescuValentin

0

मुझे खाली इन-मेमोरी डेटाबेस में तालिका बनाने की कोशिश करते समय त्रुटि user lacks privilege or object not found थी। मैंने spring.datasource.schema का उपयोग किया और समस्या यह थी कि "तालिका बनाएं" - स्टेटमेंट (जिसे "CREATE INDEX" के बाद) के बाद मेरी SQL फ़ाइल में अर्धविराम से चूक गया।

1

यदि आपने इस प्रश्न पर अन्य सभी उत्तरों की कोशिश की है, तो यह संभावना है कि आपको केस-सेंसिटीविटी समस्या का सामना करना पड़ रहा है।

एचएसक्यूएलडीबी डिफ़ॉल्ट रूप से केस-संवेदी है। यदि आप किसी स्कीमा या कॉलम या तालिका के नाम के चारों ओर डबल कोट्स निर्दिष्ट नहीं करते हैं, तो यह डिफ़ॉल्ट रूप से इसे अपरकेस में परिवर्तित कर देगा। यदि आपका ऑब्जेक्ट अपरकेस में बनाया गया है, तो आप भाग्य में हैं। यदि यह लोअरकेस में है, तो आपको डबल ऑब्जेक्ट्स के साथ अपने ऑब्जेक्ट नाम को घेरना होगा।

उदाहरण के लिए:

CREATE MEMORY TABLE "t1"("product_id" INTEGER NOT NULL) 

इस तालिका से चयन करने के लिए आप निम्न क्वेरी

select "product_id" from "t1" 
+0

CREATE TABLE DATA_LATEST_BY ( \t DATASRC \t \t VARCHAR (5) \t नहीं NULL, \t DATE_LATEST \t VARCHAR (10) \t नहीं NULL ); मैं उपर्युक्त लिपि का उपयोग कर रहा हूं लेकिन फिर भी मुझे एक ही समस्या मिल रही है – sambatha

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