2016-07-16 28 views
5

私はhsqldb-2.3.4をSpringアプリケーションから接続しようとしています。 HSQLデータベースユーザに特権またはオブジェクトが見つかりませんエラー

は、私は次の詳細
Type : HSQL Database Engine Standalone 
Driver: org.hsqldb.jdbcDriver 
URL: jdbc:hsqldb:file:mydb 
UserName: SA 
Password: SA 

を使用してデータベースを作成したI作成した春のコンフィギュレーション・ファイルでは、 "MYDB" スキーマ

ALBUMという名前のテーブル:

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

私はHSQLDBのSQLエディタを使用して、同じクエリを実行すると、それは罰金実行します。これで私を助けてもらえますか?

+0

より良い次のクエリを使用する必要があります。この表から選択することができます。 SELECT * FROM MYDB.ALBUMではなくSELECT * FROM ALBUMです。 ユーザー名とパスワードに問題がある可能性があります。デフォルトではパスワードは空白で、ユーザ名は "sa"で、大文字と小文字は区別されません。 – Azim

答えて

3

user lacks privilege or object not found複数の原因が存在する可能性があります。存在しない表にアクセスするのが最も明白です。それほど明白な理由は、コードを実行すると、ファイルデータベースURLへの接続が実際にDBを作成できるということです。あなたが経験しているシナリオは、HSQLデータベースマネージャを使用してDBを設定し、テーブルと行を追加したかもしれませんが、Javaコードが使用している特定のインスタンスではありません。これらのファイルのコピーが複数あることを確認したい場合があります。mydb.logmydb.lckmydb.propertiesなどがあなたのワークスペースにあります。 Javaコードがこれらのファイルを作成した場合、場所はプログラムの実行方法によって異なります。たとえば、Netbeansで実行されるMavenプロジェクトでは、ファイルはpom.xmlの横に格納されます。

+0

私はPGSQLを使用していて、HSQLでテストを実行していました。私はサービスをテストしていましたが、別のサービスがまだPGSQLデータベースに接続されていました。これが私のエラーの原因です:HSQLを使ってサービスをテストしようとしている間にPGSQLを実行させること。 PGSQLインスタンスを停止した後、エラーはなくなりました。 – DraganescuValentin

0

空のメモリ内のデータベースにテーブルを作成しようとしたときにエラーuser lacks privilege or object not foundが発生しました。 spring.datasource.schemaを使用しましたが、問題は「CREATE TABLE」 - ステートメント(「CREATE INDEX」が続く)の後にSQLファイル内のセミコロンが欠落していたことです。

1

この質問で他の回答をすべて試したことがある場合は、大文字と小文字を区別する問題が発生している可能性が最も高いです。

HSQLDBは​​、デフォルトでは大文字と小文字が区別されます。スキーマまたはカラムまたはテーブルの名前の前後に二重引用符を指定しないと、デフォルトでは大文字に変換されます。あなたのオブジェクトが大文字で作成されている場合、あなたは運が良いです。小文字の場合は、オブジェクト名を二重引用符で囲む必要があります。例えば

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

あなたがMYDBを作成し、あなたのSQLスクリプトを共有することができれば

select "product_id" from "t1" 
+0

は表DATA_LATEST_BY( \t DATASRC \t \t VARCHAR(5)\t NOT NULL、 \t DATE_LATEST \t VARCHAR(10)\t NOT NULL )を作成します。私は上記のスクリプトを使用していますが、それでも私は同じ問題を抱えています – sambatha

関連する問題