web-dev-qa-db-ja.com

Oracleクエリ構文モードでHSQLDBを使用するにはどうすればよいですか?

Springアプリケーション(テスト用)の組み込みデータベースとしてHSQLDBを使用しようとしています。ターゲットの本番データベースはOracleであるため、HSQLDBのOracle構文モード機能を使用したいと思います。

Springの設定で使用します

<jdbc:embedded-database type="HSQL" id="dataSource">
</jdbc:embedded-database>

<jdbc:initialize-database data-source="dataSource" enabled="true">
    <jdbc:script location="classpath:schema.sql"/> 
</jdbc:initialize-database>

そして、上部のschema.sqlに次のように書いています。

SET DATABASE SQL SYNTAX ORA TRUE;

ただし、テストを実行すると、次のエラーが発生します。

Java.sql.SQLException:予期しないトークン:ステートメント内のDATABASE [SET DATABASE SQL SYNTAX ORA TRUE]

これは構文エラーですか、権限エラーですか、それともまったく異なるものですか?

ありがとう-答えにつながる可能性のあるポインタもありがとう。

HSQLがjdbc:embedded-databaseのSpringのデフォルトであり、ターゲットがOracleであるとすると、このシナリオは実際には非常に一般的です。しかし、この問題に触れてもWeb上には何も見つかりませんでした。

更新:

上記の問題は、回答#1のおかげで解決されました。

ただし、別の例外が発生します。

org.springframework.dao.DataAccessResourceFailureException:データベースへの入力に失敗しました。ネストされた例外はJava.sql.SQLExceptionです:Java.lang.RuntimeException:サポートされていない内部操作:StatementCommandサポートされていない内部操作:StatementCommand

これが何によって引き起こされているのか考えていますか?

15
Jan Algermissen

このオプションは、HSQLDB2.0で導入されました。

正しいバージョンを使用していますか?
クラスパスのどこかにまだ1.8があるかもしれません。

しかし、これは基本的な構文の「置換」をオンにするだけなので、テストの観点からはそれほど遠くはありません。ここでは実際の動作の変更はありません(分析関数などのより高度なOracle機能についても話していません)。 、CONNECT BYまたは同様のもの)。

本番環境で使用されないDBMSを使用してアプリケーションをテストすることはめったに良い考えではありません。それは単に有効なテストではありません。

12

いくつかの基本的な構文を変更するだけであっても、ここにそれを行う方法の例があります。

<bean class="org.Apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver" />
    <property name="url" value="jdbc:hsqldb:mem:PUBLIC;sql.syntax_ora=true" />
    <property name="username" value="sa" />
    <property name="password" value="" />
</bean>
9
borjab

sql.syntax_ora=true URLプロパティは、NUMBERタイプやDUALテーブルなどの構文の互換性を有効にします。追加のプロパティを使用して、動作の互換性を高めることができます。これらは、HSQLDBガイドに記載されています。

http://hsqldb.org/doc/2.0/guide/compatibility-chapt.html#coc_compatibility_Oracle

2
fredt