2016-07-16 20 views
5

Ich versuche hsqldb-2.3.4 zu verwenden, um von Spring-Anwendung zu verbinden.HSQL Datenbank Benutzer fehlt Privileg oder Objekt nicht gefunden Fehler

habe ich Datenbank folgende Details

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

ich mit erstellt eine Tabelle ALBUM unter "MYDB" Schema

Im Frühjahr Konfigurationsdatei mit dem Namen:

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

Und in meine Federsteuerung mache ich jdbcTemplate.query("SELECT * FROM MYDB.ALBUM", new AlbumRowMapper());

und es gibt mir Ausnahme:

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) 

Wenn ich gleiche Abfrage über SQL-Editor von hsqldb ausführen führt sie in Ordnung. Kannst du mir bitte dabei helfen?

+0

besser, wenn Sie Ihren SQL-Skript teilen verwenden müssen, die MYDB schafft. SELECT * FROM ALBUM anstelle von SELECT * FROM MYDB.ALBUM. Das Problem könnte mit dem Benutzernamen und dem Passwort sein. Standardmäßig ist das Passwort leer mit Benutzername als "sa", Groß- und Kleinschreibung nicht beachtet. – Azim

Antwort

3

user lacks privilege or object not found kann mehrere Ursachen haben, am offensichtlichsten ist der Zugriff auf eine Tabelle, die nicht existiert. Ein weniger offensichtlicher Grund ist, dass beim Ausführen Ihres Codes die Verbindung zu einer Dateidatenbank-URL tatsächlich eine Datenbank erstellen kann. Das Szenario, in dem Sie sich befinden, besteht möglicherweise darin, dass Sie einen DB mit HSQL Database Manager eingerichtet haben, Tabellen und Zeilen hinzugefügt haben, aber es ist nicht diese spezifische Instanz, die Ihr Java-Code verwendet. Möglicherweise möchten Sie überprüfen, dass Sie nicht mehrere Kopien dieser Dateien haben: mydb.log, mydb.lck, mydb.properties, usw. in Ihrem Arbeitsbereich. Falls Ihr Java-Code diese Dateien erstellt hat, hängt der Speicherort davon ab, wie Sie Ihr Programm ausführen. In einem Maven-Projekt, das beispielsweise in Netbeans ausgeführt wird, werden die Dateien neben der Datei pom.xml gespeichert.

+0

Ich habe PGSQL verwendet und Tests mit HSQL ausgeführt. Ich habe einen Dienst getestet, aber ein anderer Dienst war immer noch mit der PGSQL-Datenbank verbunden. Das hat den Fehler für mich verursacht: PGSQL muss ausgeführt werden, während versucht wird, den Dienst mit HSQL zu testen. Nachdem ich die PGSQL-Instanz beendet hatte, war der Fehler behoben. – DraganescuValentin

0

Ich hatte den Fehler user lacks privilege or object not found beim Versuch, eine Tabelle in einer leeren In-Memory-Datenbank zu erstellen. Ich benutzte spring.datasource.schema und das Problem war, dass ich ein Semikolon in meiner SQL-Datei nach der "CREATE TABLE" -Statement (gefolgt von "CREATE INDEX") verpasst habe.

1

Wenn Sie alle anderen Antworten zu dieser Frage ausprobiert haben, ist es sehr wahrscheinlich, dass Sie mit einem Problem der Groß- und Kleinschreibung konfrontiert sind.

HSQLDB unterscheidet standardmäßig zwischen Groß- und Kleinschreibung. Wenn Sie die doppelten Anführungszeichen um den Namen eines Schemas oder einer Spalte oder Tabelle nicht angeben, wird das standardmäßig in Großbuchstaben konvertiert. Wenn Ihr Objekt in Großbuchstaben erstellt wurde, haben Sie Glück. Wenn es in Kleinbuchstaben ist, müssen Sie den Objektnamen mit doppelten Anführungszeichen umgeben.

Zum Beispiel:

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

aus dieser Tabelle wählen Sie die folgenden Abfrage

select "product_id" from "t1" 
+0

TABLE DATA_LATEST_BY ( \t DATASRC \t \t VARCHAR (5) \t NOT NULL, \t DATE_LATEST \t VARCHAR (10) \t NOT NULL ) schaffen; Ich benutze das obige Skript, aber immer noch das gleiche Problem – sambatha