DB変換クラスとは、ApplicationDatabaseとのデータのバインド時、 結果の取得時、PLSQLの実行時にJDBCとWebtribeデータとの中継に使用されます。
Webtribeにて標準から提供しているDB変換クラスには下記の種類が存在します。
Operation Management Consoleのデータクラスにて行います。ダイアログより使用するDB変換クラスを選択して下さい。
jp.ne.mki.wedge.data.db.defaults.DefaultDBDataConvertを継承してクラスを作成します。
継承したメソッドのうち、オーバライドするメソッドは以下の4つになります。これらのメソッドをオーバライドしない場合は、標準のDB変換クラス 文字列(VARCHAR)と同じ動作となります。
DB変換クラスの実装例として、長整数型(Long)を以下に記します。
(このクラスは標準でWebtribeに組み込まれています)
package jp.ne.mki.wedge.data.db.defaults; import java.sql.CallableStatement; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; /** * 渡されたオブジェクトを long として処理します。 * オブジェクトが String, BigDecimal, Integer の場合は、long 型に変換してから処理を行います。 * オブジェクトが long の場合は、そのまま処理を行います。 * オブジェクトが long, BigDecimal, String のいずれでもない場合は、オブジェクトのまま渡します。 * この場合の処理結果はデータベースに依存するため保証されません。 * */ public class Long extends DefaultDBDataConvert { /** * ストアドプロシージャから long 型としてデータを取り出します。 * @see jp.ne.mki.wedge.run.db.control.dbc.DBDataConvert#getObject(java.sql.CallableStatement, int) */ public Object getObject(CallableStatement cs, int idx) throws SQLException { long ll = cs.getLong(idx); if (cs.wasNull()) { return null; } else { return java.lang.Long.toString(ll); } } /** * 検索結果から long 型としてデータを取り出します。 * @see jp.ne.mki.wedge.run.db.control.dbc.DBDataConvert#getObject(java.sql.ResultSet, int) */ public Object getObject(ResultSet rs, int idx) throws SQLException { long ll = rs.getLong(idx); if (rs.wasNull()) { return null; } else { return java.lang.Long.toString(ll); } } /** * ストアドプロシージャに出力データの型を BIGINT して登録します。 * @see jp.ne.mki.wedge.run.interfaces.DBDataConvertInterface#registOutputDataType(java.sql.CallableStatement, int) */ public void registOutputDataType(CallableStatement cs, int idx) throws SQLException { cs.registerOutParameter(idx, Types.BIGINT); } /** * 渡されたオブジェクトが文字列(String)の場合は long に変換してからデータベースに渡します。 * @see jp.ne.mki.wedge.run.db.control.dbc.DBDataConvert#setObject(java.sql.PreparedStatement, int, java.lang.Object) */ public void setObject(PreparedStatement stmt, int idx, Object data) throws SQLException { if (data == null) { stmt.setNull(idx, Types.BIGINT); } else { if (data instanceof String) { String str = (String) data; if (str.length() == 0) { stmt.setNull(idx, Types.BIGINT); } else { long ll = java.lang.Long.parseLong(str); stmt.setLong(idx, ll); } } else if (data instanceof java.lang.Integer) { stmt.setLong(idx, ((java.lang.Integer) data).longValue()); } else if (data instanceof java.lang.Long) { stmt.setLong(idx, ((java.lang.Long) data).longValue()); } else if (data instanceof java.math.BigDecimal) { stmt.setLong(idx, ((java.math.BigDecimal) data).longValue()); } else { stmt.setObject(idx, data); } } } }
実装したクラスをWebtribeに登録するには、Operation Management Console基本クラスタブのDB変換クラスに追加します。
クラス名には作成したクラスのパスを入力してください。
実行時には作成したクラスをRunDBServerのクラスパスに指定して実行してください。