A Day In The Life

とあるプログラマの備忘録

DBUnitで「data type not recognized」の警告がでる

DBUnitでテストを行ってると

WARNING - XXXテーブル名.XXXXフィールド名 data type (1111, ‘NVARCHAR2’) not recognized and will be ignored. See FAQ for more information.

2006-04-04 19:06:32,281 ERROR testcase.BaseDatabaseTestCase (BaseDatabaseTestCase.java:170) - org.dbunit.dataset.NoSuchColumnException: XXXテーブル名.XXXXフィールド名

org.dbunit.dataset.NoSuchColumnException: TGM_CUSTOMER_MSTR.XXXXフィールド名
って警告がでたあげく落ちてしまった。。。

よく調べるとデータセットを生成する時にnvarcharのフィールドを読み込もうとしてこの警告が出たらしい。



で本家DBUnitのサイトを調べると
Why I get a "data type not recognized" warning?

By default, DbUnit only support standard JDBC data types. You will get this warning message if you are using vendor specific data types.

Read how to replace the default data type factory and how to disable this warning message.
と書いてある。

デフォルト時はどうもnvarcharはダメらしい。

さらに調べると解決策が書いてあったのでそれを実装して解決。

↓こんな感じ

/**
 * @see DatabaseTestCase#getConnection()
 */
protected IDatabaseConnection getConnection() throws Exception {
 //java.sql.Connectionを取得する
 Connection connection = ConnectionUtil.getConnection();
 String schema = connection.getMetaData().getUserName();
 //DBUnitのコネクション設定
 IDatabaseConnection conn = new DatabaseConnection(connection,schema);
 DatabaseConfig config = conn.getConfig();
 //データタイプをセットしてやる
 config.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY,
  new OracleDataTypeFactory());
 return conn;
}

少しびびったけど解決策があって一安心。