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
これが何によって引き起こされているのか考えていますか?
このオプションは、HSQLDB2.0で導入されました。
正しいバージョンを使用していますか?
クラスパスのどこかにまだ1.8があるかもしれません。
しかし、これは基本的な構文の「置換」をオンにするだけなので、テストの観点からはそれほど遠くはありません。ここでは実際の動作の変更はありません(分析関数などのより高度なOracle機能についても話していません)。 、CONNECT BYまたは同様のもの)。
本番環境で使用されないDBMSを使用してアプリケーションをテストすることはめったに良い考えではありません。それは単に有効なテストではありません。
いくつかの基本的な構文を変更するだけであっても、ここにそれを行う方法の例があります。
<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>
sql.syntax_ora=true
URLプロパティは、NUMBERタイプやDUALテーブルなどの構文の互換性を有効にします。追加のプロパティを使用して、動作の互換性を高めることができます。これらは、HSQLDBガイドに記載されています。
http://hsqldb.org/doc/2.0/guide/compatibility-chapt.html#coc_compatibility_Oracle