4

java/junit テストを使用して、SQL スクリプトに標準 SQL が含まれていることをテストする方法はありますか?

現在、Postgres db にデータベースなどを作成するための sql スクリプトがありますが、hsqldb を使用するとすべて失敗します。そのため、SQL ステートメントが標準 SQL であるかどうかをテストするための Java ツールが存在するかどうか疑問に思います。

それとも、データベース ベンダーごとに異なるスクリプト セットを作成するのが賢明でしょうか? もしそうなら、特定のスクリプトが postgres/hsqldb で動作するかどうかをテストする方法はありますか?

4

6 に答える 6

1

H2 データベースはさまざまなモードをサポートしており、postgres のテストに役立つ場合があります。私たちの SQL には、H2 以外はサポートされていない関数が含まれていることがよくありますが、実際に静的 Java メソッドを呼び出して、これを回避します。さまざまなデータベース ベンダーをサポートしたい場合は、本当に基本的なクエリを実行している場合を除き、ベンダー固有のスクリプト ルートをたどる必要があります。

利用可能なリソースがある場合は、ライブの postgres データベースに対してテストするために使用できる本格的な UAT 環境をセットアップすることをお勧めします。一見わずかな db 構成の違いでも、予期しない方法でクエリ プランに影響を与える可能性があるためです。

于 2010-08-25T08:34:06.380 に答える
0

SQL ステートメントが標準 SQL に準拠しているかどうかをチェックするための最適なツールは、HSQLDB 2.0 です。これは特に、データ定義ステートメントに当てはまります。HSQLDB は、いくつかのバージョンにわたって標準の一部を採用するのではなく、標準に合わせて作成されています。

PostgresSQL はゆっくりと標準 SQL に移行しています。ただし、まだいくつかの「レガシー」データ型があります。HSQLDB では、他の方言との互換性のために CREATE TYPE ステートメントで型を定義できます。また、同じ目的で SQL または Java で関数を定義することもできます。

最良のポリシーは、代替データベースの構文をサポートするユーザー定義の型と関数を使用して、標準 SQL を可能な限り使用することです。

于 2010-08-25T15:39:17.677 に答える
0

私は通常、標準的なユーザー/パス設定でローカルホスト接続を使用して、このコードをテストする非常に単純な Java ラッパーを作成しました。

テストによって重要なものが破壊されないように、一時データベースまたは既知のテスト データベースを使用することを忘れないでください。

上記の理由は、特定のデータベース (非標準機能など) が必要だったためです。

junit テスト用の標準的な sql-stuff (構文、選択など) のみをテストしたい場合は、java に埋め込まれた sql データベースを使用することを検討します (通常はメモリのみ)。そうすれば、データベースをインストールする必要がなく、他のインストールを破棄するリスクもなく、多くのものを簡単にテストできます。

于 2010-08-25T08:16:01.603 に答える
0

SQL 構文パーサーとバリデーターを探しているようですね。私がよく知っている Java SQL パーサーは Zql だけですが、実際に使用したことはありません。

昨年初めに同様の質問がありましたが、最良の回答はANTLRを使用して独自のパーサーを作成することであることが判明しました。

于 2010-08-25T08:34:58.150 に答える
0

さまざまなベンダーが、SQL 実装でさまざまな追加機能を公開しています。

テストするデータベースのセットを決定できます。次にhttp://dbunit.sourceforge.netを使用して、テスト ジョブを簡素化します。

于 2010-08-25T08:43:28.950 に答える
0

ZQLは Junit で正常に動作します。

ZqlParser parser = new ZqlParser(any input stream);
try{
 parser = parser.readStatement();
}catch(ParseException e){
// if sql is not valid it caught here
}
于 2014-06-20T07:37:39.897 に答える