2016-07-16 16 views
5

Próbuję użyć hsqldb-2.3.4, aby połączyć się ze Spring applicastion.Użytkownik bazy danych HSQL nie ma uprawnień lub obiektu nie znaleziono błąd

stworzyłem bazę danych przy użyciu następujących danych

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

Stworzyłem tabelę o nazwie ALBUM pod "mydb" schematu

W pliku konfiguracyjnym wiosna:

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

I mój kontroler wiosny robię jdbcTemplate.query("SELECT * FROM MYDB.ALBUM", new AlbumRowMapper());

i to daje mi wyjątek:

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) 

Gdybym wykonać samo zapytanie za pośrednictwem edytora SQL z HSQLDB to wykonuje dobrze. Czy możesz mi pomóc z tym.

+0

lepiej, jeśli można udostępnić skrypt SQL, który tworzy MojaBD. SELECT * FROM ALBUM zamiast SELECT * FROM MYDB.ALBUM. Problem może dotyczyć nazwy użytkownika i hasła. Domyślnie hasło jest puste przy nazwie użytkownika jako "sa", wielkość liter nie jest zależna. – Azim

Odpowiedz

3

user lacks privilege or object not found może mieć wiele przyczyn, z których najbardziej oczywiste jest uzyskanie dostępu do tabeli, która nie istnieje. Mniej oczywistym powodem jest to, że po uruchomieniu kodu połączenie z adresem URL bazy danych pliku może faktycznie utworzyć DB. Scenariusz, którego doświadczasz, może polegać na skonfigurowaniu bazy danych przy użyciu HSQL Database Manager, dodaniu tabel i wierszy, ale nie jest to konkretne wystąpienie, z którego korzysta twój kod Java. Możesz sprawdzić, czy nie masz wielu kopii tych plików: mydb.log, mydb.lck, mydb.properties itd. W twoim obszarze roboczym. W przypadku, gdy twój kod Java utworzył te pliki, lokalizacja zależy od sposobu uruchomienia twojego programu. W projekcie Maven uruchamianym na przykład w Netbeans pliki są przechowywane razem z pom.xml.

+0

Użyłem PGSQL i uruchomiłem testy z HSQL. Testowałem usługę, ale inna usługa była nadal połączona z bazą danych PGSQL. To właśnie spowodowało błąd dla mnie: Po uruchomieniu PGSQL podczas próby przetestowania usługi za pomocą HSQL. Po zatrzymaniu instancji PGSQL błąd zniknął. – DraganescuValentin

0

Podczas próby utworzenia tabeli w pustej bazie danych w pamięci wystąpił błąd user lacks privilege or object not found. Użyłem spring.datasource.schema, a problem polegał na tym, że brakowało mi średnika w moim pliku SQL po "CREATE TABLE" -Statement (po którym nastąpiło "CREATE INDEX").

1

Jeśli wypróbowałeś wszystkie inne odpowiedzi na to pytanie, najprawdopodobniej masz problem z rozróżnianiem wielkości liter.

W HSQLDB rozróżniana jest domyślnie wielkość liter. Jeśli nie określisz podwójnych cudzysłowów wokół nazwy schematu lub kolumny lub tabeli, to domyślnie skonwertuj to na wielkie litery. Jeśli obiekt został utworzony wielkimi literami, masz szczęście. Jeśli jest pisany małymi literami, będziesz musiał otoczyć swoją nazwę obiektu podwójnymi cudzysłowami.

Na przykład:

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

Aby wybrać z tej tabeli będzie trzeba użyć następującej kwerendy

select "product_id" from "t1" 
+0

Tworzenie tabeli DATA_LATEST_BY ( \t datasrc \t \t VARCHAR (5) \t niezerowy, wówczas \t DATE_LATEST \t VARCHAR (10) \t nie NULL ); Używam powyższego skryptu, ale wciąż mam ten sam problem – sambatha

Powiązane problemy