1

私は自分のマシンでJavaアプリを書いていて、セットアップしたDBを使用して完全に動作しますが、DBがわずかに異なるため、サイトにインストールすると爆発します。

だから私はそれを確認するためにいくつかのコードを書いているところです:

  • A: DB の詳細は正しいです

  • B: データベースには期待するすべてのテーブルがあり、適切な列があります。

A はダウンしましたが、どこから B を開始すればよいかわかりません。何か提案はありますか?

現在のクライアントのターゲット DB は Oracle ですが、SQL Server でも実行するようにアプリを構成できます。したがって、一般的な解決策をいただければ幸いですが、一方を他方から実行する方法を理解できると確信しているため、必須ではありません。

4

9 に答える 9

4

データベースの information_schema を照会する必要があります。ここに Oracle の例をいくつか示します。私が認識しているすべてのプラットフォームには、似たようなものがあります。

http://www.alberton.info/oracle_meta_info.html

于 2009-01-30T12:38:18.397 に答える
1

これには、LiquiBase のようなデータベース移行ツールを使用できる場合があります。これらのツールのほとんどには、データベースをチェックする何らかの方法があります。実際に使った経験がないので推測です。

于 2009-01-30T12:38:23.407 に答える
1

DbUnitを使用してデータベースをテストしています。これは Java ベースのソリューションであり、 Junitとうまく統合されます。ほとんど Java がなくても使用可能です。あなたが説明したのとまったく同じ状況で使用したことはありませんが、十分に機能するはずです。

于 2009-01-30T12:40:25.273 に答える
0

プレーンな JDBC を使用している場合は、DatabaseMetadata.getTablesおよびメタデータ クラスで使用可能なその他の同様のメソッドを利用してみてください。

于 2009-01-30T13:31:14.080 に答える
0

Oracleでこれらのテーブルを使用して、テーブル、列、ビューなどの存在を確認できます

USER_TABLES USER_VIEWS USER_PROCEDURE

(またはすべて) USER_OBJECTS WHERE OBJECT_TYPE = '??'

続行するには... テーブル列の USER_TAB_COLS

よろしくK

于 2009-01-30T13:20:16.723 に答える
0

これにはMigrateDBを使用します。特定のデータベースの特定のテーブル、列、行、インデックスなどの存在をチェックし、それらを「テスト」として使用するなどのことを行うクエリを作成できます。テストが失敗すると、「アクション」がトリガーされます (これは、問題を解決する方法を知っている別のクエリです)。

MigrateDB は複数のデータベース プラットフォームをサポートし (たとえば、プラットフォームごとに「テーブル存在クエリのチェック」を指定できます)、完全に構成可能なテスト (独自に作成できます)、かなり完全な Oracle テストが付属しており、"監査のみ」モードを使用して、相違点のみを通知します。

これは優れた堅牢なソリューションです。

于 2009-01-30T15:46:54.507 に答える
0

最も一般的な解決策は、try catch ブロック内で、予想される列を持つ select 句とテーブル名を持つ from 句を使用してクエリを実行することです。データを取得しないように、 where 句を 1=2 として配置できます。例外をスローせずにクエリが実行された場合、期待されるテーブルと列が得られます。

于 2009-01-30T12:39:13.450 に答える
0

わずかに異なる部分は、最初にデータベースの作成をスクリプト化することでより適切に処理できる場合があります。自動化されたプロセスにより、2 つを同一にする可能性が高くなります。

もう 1 つの重要なポイントは、devl 環境と prod 環境を同一にすることで、リスクを最小限に抑えることです。つまり、両方のデータベース スキーマとベンダーを同じにします。両者の違いを生む状況を変えてください。

最後に、何が「わずかに」異なるのかは述べていませんが、これらは避けられない場合があります (たとえば、Oracle はシーケンスを使用し、SQL Server は ID を使用します)。おそらく、Hibernate はベンダー間の切り替えをより確実にするのに役立つでしょう。データベースの変更が構成ファイル内の単一の値の変更を意味するように、詳細を抽象化します。

于 2009-01-30T12:48:38.893 に答える
0

基本的に必要なのは、データベースの単体テストです。「FOOBARという名前の列が存在する必要があり、型は整数でなければなりません。外部キーは存在しない可能性があります。」

これはプレーンな JUnit と JDBC で実行できます (そのメタデータについてはテーブルに問い合わせてください)。これは、dbUnit などを使用する場合はより困難になる可能性がある、実行されていることを確実に確認したい場合があるためです。

于 2009-01-30T12:53:00.100 に答える