0

DBUnitを使用してデータベースにデータを入力し、テスト中にそのコンテンツが既知のコンテンツになるようにします。

私が取り組んでいるdbスキーマは、他のdbスキーマが存在するOracle11gインスタンスにあります。これらのスキーマの一部では、パブリックシノニムに関連付けられ、選択する権限が与えられているテーブルが定義されています。

データベースへの入力方法を定義するxmlを実行すると、xmlファイルに複数のスキーマで定義されたテーブルが含まれていない場合も、DBUnitはそのテーブルでAmbiguousTableNameException例外をスローします。

この動作を解決するには、次の3つの解決策があることがわかりました。

  1. 1つのデータベーススキーマにのみアクセスできるデータベース接続クレデンシャルを使用します。
  2. DatabaseConnectionまたはDatabaseDataSourceConnectionコンストラクターにスキーマ名を指定します。
  3. 修飾テーブル名のサポートを有効にします(ハウツードキュメントを参照)。

私の場合、ソリューション1しか適用できませんが、それを採用しても同じ例外が発生します。

問題を引き起こすテーブルは3つのスキーマで定義されており、それに基づいて行動する機会はありません。

誰か助けてくれませんか?

4

4 に答える 4

4

解決策を見つけました。テーブルの名前でスキーマを指定しtrue、プロパティhttp://www.dbunit.org/features/qualifiedTableNames(に対応org.dbunit.database.FEATURE_QUALIFIED_TABLE_NAMES)を設定しました。

このように、テーブルにデータを入力するための私のxmlコードは次のようになります。

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
  <SCHEMA.TABLE ID_FIELD="1" />
</dataset>

ここSCHEMAで、はスキーマ名、TABLEはテーブル名です。

プロパティを設定するために、次のコードを使用しました。

DatabaseConfig dBConfig = dBConn.getConfig(); // dBConn is a IDatabaseConnection
dBConfig.setProperty(DatabaseConfig.FEATURE_QUALIFIED_TABLE_NAMES, true);
于 2013-02-18T08:38:41.940 に答える
1

私の場合、

ユーザーにdbaロールを付与したため、dbunitはAmbiguousTableNameExceptionをスローします。

ユーザーに対するdbaロールを取り消した後、その問題を解決します。

SQL> revoke dba from username;
于 2015-09-08T01:27:22.420 に答える
0

Oracle DBでDbunitsを実行しているときに、同じAmbiguousTableNameExceptionが発生しました。それは正常に動作していて、ある日エラーをスローし始めました。

根本原因:ストアドプロシージャの呼び出し中に、誤って小文字に変更されました。大文字に変更すると、動作を開始しました。

これは、シェマ名をiDatabaseTester.setSchema( "SCHEMANAMEINCAPS")のようなIDatabaseTesterに設定することでも解決できます。

ありがとうスミサ

于 2015-04-27T10:00:47.720 に答える
0

私はSpringJDBCをMySQLConnector(v8.0.17)と一緒に使用していました。この回答で説明されている2つのステップに従うだけでは、役に立ちませんでした。

  1. まず、Springデータソースにスキーマを設定する必要がありました。
  2. 次に、プロパティ「databaseTerm」「schema」に設定する必要もありました。
    • ここで説明するように、デフォルトでは「カタログ」に設定されています。
    • このプロパティを設定する必要があるのは、(Springの実装ではjavax.sql.DataSource設定されていない場合(つまり、デフォルトで「カタログ」に設定されている場合)、 dataSourceに設定したとしても、によって返される接続にスキーマが設定されていdataSource.getConnection()ないためです。
   @Bean
   public DriverManagerDataSource cloudmcDataSource() {
      DriverManagerDataSource dataSource = new DriverManagerDataSource();
      dataSource.setDriverClassName("<driver>");
      dataSource.setUrl("<url>");
      dataSource.setUsername("<uname>");
      dataSource.setPassword("<password>");
      dataSource.setSchema("<schema_name>");

      Properties props = new Properties();
      // the following key-value pair are constants; must be set as is
      props.setProperty("databaseTerm", "schema");  
      dataSource.setConnectionProperties(props);
      return dataSource;
   }
  1. ここの回答で説明されている変更を行うことを忘れないでください。
于 2020-10-28T15:54:29.147 に答える