2011-01-02 14 views
14

私は、Springアプリケーション(テスト用)で組み込みデータベースとしてHSQLDBを使用しようとしています。対象となる本番データベースはOracleであるため、Oracle構文モードのHSQLDBを使用したいと考えています。Oracleクエリ構文モードでHSQLDBを使用するには?

SET DATABASE SQL SYNTAX ORA TRUE;

私のテストを実行している場合しかし、私は次のエラーを取得する:

私は私が書いた上部の

<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でを使用春の設定で

java.sql.SQLException: Unexpected token: DATABASE in statement [SET DATABASE SQL SYNTAX ORA TRUE]

これは構文エラーですか、パーミッションエラーなのか、まったく違うのですか?

ありがとうございます - 回答につながる可能性のあるポインタについても。

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

更新:

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

しかし、私は今、別の例外を取得:

org.springframework.dao.DataAccessResourceFailureException: Failed to populate database; nested exception is java.sql.SQLException: java.lang.RuntimeException: unsupported internal operation: StatementCommand unsupported internal operation: StatementCommand

これはによって引き起こされているものの任意のアイデア?

+0

あなたは今までStatementCommandエラーの解決方法を見つけますか?私は今、同じ船にいます。 –

+0

Oracle互換モードでH2データベースを代わりに使用してみませんか? – ebaxt

答えて

10

このオプションは、HSQLDB 2.0で導入されました。

正しいバージョンを使用していますか?
おそらく、クラスパスのどこかにまだ1.8があります。

しかし、これは基本的な構文 "置き換え"を行うだけなので、とにかくテストの面ではあなたを得ることはできません。ここで実際の動作の変更はありません。分析機能、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> 
+0

ああ、ありがとう。はい - 私は1.7歳でした。私はテストであなたに同意します - しかし、私の場合、それはDBのほんのわずかな使用です。 –

+2

2.0私のために動作しません、私は新しいバージョン、(2.2.8) – banterCZ

+0

2.2を使用しなければならなかった。4も私のために働いていませんでした(banterCZに+1してくれてありがとう!)2.2.8にもアップグレードしました...それはアップグレードかhttp://stackoverflow.com/questions/4628857/junit-hsqldb-howでした。 -to-get-around-errors-oracle-syntax-with-testing-hsqを使用してURLにsql.syntax_ora = trueを追加する –

7

は、あなたがそれを行うことができる方法の一例です。より多くの動作の互換性のために、追加のプロパティを使用できます。これらは、HSQLDBガイドに記載されています:

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

+1

jdbc:hsqldb:mem:PUBLIC:sql.syntax_ora = trueにする必要があります。 – mrembisz

+0

更新されました。ありがとう – borjab

+0

@borjabあなたはまだコンマまたはセミコロンを使用するかどうかで異なります –

0

sql.syntax_ora=true URLプロパティはNUMBER型とDUAL表を含め、構文の互換性を可能にします:それはここでしかいくつかの基本的な構文を変更しても

関連する問題