2016-07-16 1 views
5

Я пытаюсь использовать hsqldb-2.3.4 для подключения из пружинного аппликатора.У пользователя базы данных HSQL отсутствует привилегия или объект не найдена ошибка

Я создал базу данных, используя следующие данные

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) 

Если я выполнить тот же запрос через SQL редактор HSQLDB он выполняет отлично. Не могли бы вы помочь мне в этом.

+0

Лучше, если вы можете поделиться SQL скрипт, который создает MYDB. SELECT * FROM ALBUM вместо SELECT * FROM MYDB.ALBUM. Проблема может быть с именем пользователя и паролем. По умолчанию пароль пуст с именем пользователя как «sa», без учета регистра. – Azim

ответ

3

user lacks privilege or object not found может иметь несколько причин, наиболее очевидным из которых является доступ к таблице, которая не существует. Менее очевидная причина заключается в том, что при запуске кода соединение с URL-адресом базы данных на самом деле может создать БД. Сценарий, который вы испытываете, может заключаться в том, что вы настроили базу данных с помощью HSQL Database Manager, добавили таблицы и строки, но это не тот конкретный экземпляр, который использует ваш Java-код. Вы можете проверить, что у вас нет нескольких копий этих файлов: mydb.log, mydb.lck, mydb.properties и т. Д. В вашем рабочем пространстве. В случае, если ваш код Java создал эти файлы, местоположение зависит от того, как вы запускаете свою программу. Например, в проекте Maven внутри Netbeans файлы хранятся вместе с pom.xml.

+0

Я использовал PGSQL и запускал тесты с HSQL. Я тестировал службу, но еще одна служба по-прежнему подключалась к базе данных PGSQL. Вот что вызвало ошибку для меня: наличие PGSQL при попытке протестировать службу с помощью HSQL. После того как я остановил экземпляр PGSQL, ошибка исчезла. – DraganescuValentin

0

У меня была ошибка user lacks privilege or object not found при попытке создать таблицу в пустой базе данных в памяти. Я использовал spring.datasource.schema, и проблема заключалась в том, что я пропустил точку с запятой в своем SQL-файле после «CREATE TABLE» -Statement (за которым последовал «CREATE INDEX»).

1

Если вы пробовали все другие ответы по этому вопросу, то, скорее всего, вы столкнулись с проблемой чувствительности к регистру.

HSQLDB чувствителен к регистру по умолчанию. Если вы не укажете двойные кавычки вокруг имени схемы или столбца или таблицы, то по умолчанию она будет конвертировать ее в верхний регистр. Если ваш объект был создан в верхнем регистре, вам повезло. Если он находится в нижнем регистре, вам придется окружить свое имя объекта двойными кавычками.

Например:

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

Чтобы выбрать из этой таблицы, вам придется использовать следующий запрос

select "product_id" from "t1" 
+0

CREATE TABLE DATA_LATEST_BY ( \t DATASRC \t \t УАКСНАК (5) \t NOT NULL, \t \t DATE_LATEST VARCHAR (10) NOT NULL \t ); Я использую вышеупомянутый скрипт, но все же я получаю такую ​​же проблему – sambatha

Смежные вопросы