2016-07-16 230 views
5

Sto tentando di utilizzare hsqldb-2.3.4 per connettersi dall'applicazione Spring.L'utente del database HSQL non ha il privilegio o l'errore dell'oggetto non trovato

ho creato banca dati utilizzando i seguenti dati

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

ho creato una tabella denominata ALBUM sotto "MYDB" schema

Nel file di configurazione di primavera:

<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> 

E in il mio controller di primavera che sto facendo jdbcTemplate.query("SELECT * FROM MYDB.ALBUM", new AlbumRowMapper());

e mi dà eccezione:

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) 

Se eseguo stessa query tramite SQL editor di hsqldb esegue bene. Puoi per favore aiutarmi con questo.

+0

Meglio se è possibile condividere lo script SQL che crea MYDB. SELEZIONA * DA ALBUM anziché SELECT * DA MYDB.ALBUM. Il problema potrebbe essere con nome utente e password. Di default la password è vuota con username come "sa", case insensitive. – Azim

risposta

3

user lacks privilege or object not found può avere più cause, il più ovvio è che stai accedendo a una tabella che non esiste. Un motivo meno evidente è che, quando si esegue il codice, la connessione a un URL del database di file può effettivamente creare un DB. Lo scenario che stai vivendo potrebbe essere che hai impostato un DB utilizzando HSQL Database Manager, aggiunto tabelle e righe, ma non è questa specifica istanza che il tuo codice Java sta utilizzando. È possibile controllare che non si disponga di più copie di questi file: mydb.log, mydb.lck, mydb.properties, ecc. Nell'area di lavoro. Nel caso in cui il codice Java abbia creato questi file, la posizione dipende da come si esegue il programma. Ad esempio, in un progetto Maven eseguito all'interno di Netbeans, i file vengono archiviati insieme a pom.xml.

+0

Stavo usando PGSQL ed eseguivo test con HSQL. Stavo testando un servizio ma un altro servizio era ancora connesso al database PGSQL. Questo è ciò che ha causato l'errore per me: Avere il PGSQL in esecuzione durante il tentativo di testare il servizio con HSQL. Dopo aver fermato l'istanza PGSQL, l'errore era sparito. – DraganescuValentin

0

Ho avuto l'errore user lacks privilege or object not found durante il tentativo di creare una tabella in un database vuoto in memoria. Ho usato spring.datasource.schema e il problema era che mi mancava un punto e virgola nel mio file SQL dopo la "CREATE TABLE" -Statement (che era seguita da "CREATE INDEX").

1

Se hai provato tutte le altre risposte a questa domanda, è molto probabile che tu stia affrontando un problema di distinzione tra maiuscole e minuscole.

HSQLDB fa distinzione tra maiuscole e minuscole per impostazione predefinita. Se non si specificano le virgolette attorno al nome di uno schema o colonna o tabella, per impostazione predefinita verrà convertito in maiuscolo. Se il tuo oggetto è stato creato in maiuscolo, allora sei fortunato. Se è in minuscolo, dovrai circondare il nome dell'oggetto con virgolette doppie.

Ad esempio:

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

Per selezionare da questa tabella si dovrà utilizzare la seguente query

select "product_id" from "t1" 
+0

CREATE TABLE DATA_LATEST_BY ( \t DATASRC \t \t VARCHAR (5) \t NOT NULL, \t DATE_LATEST \t VARCHAR (10) NOT NULL \t ); Sto usando lo script di cui sopra, ma sto ottenendo lo stesso problema – sambatha