2013-08-12 5 views
5

पर्यावरण में: स्प्रिंग (3.2.3.RELEASE) + MyBatis (3.2.2) + HSQL (2.3.0)HSQLDB रिपोर्ट "उपयोगकर्ता विशेषाधिकार का अभाव है या वस्तु नहीं मिली" केवल स्मृति आधारित डेटाबेस

<resultMap id="hashMapResult" type="java.util.HashMap"> 
    <result property="key" column="key" /> 
    <result property="value" column="value" /> 
</resultMap> 

<select id="getSettings" resultMap="hashMapResult"> 
    SELECT "KEY","VALUE" from "PUBLIC"."SETTINGS"; 
</select> 

    create table "SETTINGS" (
    "KEY" varchar(255) not null, 
    "VALUE" varchar(512) not null, 
    CONSTRAINT SETTINGS_KEY_UNIQUE UNIQUE("KEY") 
    ); 

यूआरएल: jdbc: hsqldb: mem: mydb; sql.syntax_mys = true; shutdown = true;

स्मृति डेटाबेस का उपयोग करते समय निम्न त्रुटियों छपी:

Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: SETTINGS 
at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0] 
at org.hsqldb.error.Error.error(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0] 
at org.hsqldb.SchemaManager.getTable(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0] 
at org.hsqldb.ParserDQL.readTableName(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0] 
at org.hsqldb.ParserDQL.readTableOrSubquery(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0] 
at org.hsqldb.ParserDQL.XreadTableReference(Unknown Source) ~[hsqldb-2.3.0.jar:2.3.0] 

लेकिन जब फ़ाइल आधारित डेटाबेस JDBC का उपयोग कर: HSQLDB: फ़ाइल: mydb; sql.syntax_mys = true बंद = true बिल्कुल कोई त्रुटि नहीं

मैं वसंत के EmbeddedDatabaseFactory उपयोग कर रहा हूँ डेटाबेस init करने के लिए:

try { 
     EmbeddedDatabaseFactory dbFactory = new EmbeddedDatabaseFactory(); 
     DatabaseConfig dbConfig = appConfig.getDbConfig(); 
     ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); 
     populator.setContinueOnError(false); 
     populator.setIgnoreFailedDrops(false); 
     DefaultResourceLoader resourceLoader = new DefaultResourceLoader(); 
     populator.addScript(resourceLoader.getResource(dbConfig 
       .getSqlSchemeFile())); 
     populator.addScript(resourceLoader.getResource(dbConfig 
       .getSqlDataFile())); 
     dbFactory.setDatabasePopulator(populator); 
     dbFactory.setDatabaseName(dbConfig.getName()); 
     dbFactory.setDatabaseConfigurer(new HSQLConfigurer(dbConfig)); 
     return dbFactory.getDatabase(); 
    } catch (Exception e) { 
     logger.error("dataSource error", e); //$NON-NLS-1$ 

     return null; 
    } 

किसी को भी जानता है क्यों?

उत्तर

5

आप इस संदर्भ में बंद = सच उपयोग नहीं करना चाहिए। ऐसा लगता है कि कनेक्शन बंद है और डेटाबेस बंद हो गया है, जिसका अर्थ है कि स्मृति डेटाबेस अब मौजूद नहीं है।

तुम भी एक स्तंभ नाम के रूप में मूल्य का उपयोग कर से बचना चाहिए। यह एक खोजशब्द है। इसलिए 'गणना' नामक एक कॉलम भी उसी तरह से विफल हो जाएगा -

+2

को हटाने "शट डाउन = सच" मेरी समस्या हल। धन्यवाद। – SunLiWei

4

fredt के जवाब

जब एक स्तंभ एक आरक्षित शब्द के साथ नामित किया गया है यह त्रुटि रिपोर्ट किया गया है पर विस्तार करने के लिए।

(HSQL के लिए और अन्य) आरक्षित शब्दों की एक सूची के लिए इस उत्तर को देखें - How to find if a column name is a reserved keyword across various databases

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