- PR -

iBATISとOracleの連携

投稿者投稿内容
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2007-11-01 15:25
とすると問題の動作はOracleJDBCの仕様っぽいですね。
キタキツネ
常連さん
会議室デビュー日: 2006/11/23
投稿数: 32
お住まい・勤務地: 沖縄県名護市
投稿日時: 2007-11-01 17:06
OraclePreparedStatementのsetFixedCHARを使用するといけるかもですねぇ。。
まだ検証はしていませんが。

と、なると。ソースコード中にミドルウェアの名前が入ってしまうってことですね・・うーむ。。
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2007-11-01 17:44
であれば、
iBatisは自分自身でカスタムタイプハンドラーを作成できるので、その中で
PreparedStatementをOraclePreparedStatementへダウンキャストし、
setFixedCHAR()をコールするのがいいと思います。
キタキツネ
常連さん
会議室デビュー日: 2006/11/23
投稿数: 32
お住まい・勤務地: 沖縄県名護市
投稿日時: 2007-11-02 10:16
Anthyhimeさん、

度々ご返答ありがとうございます。
無事動作させることができました!
参考までにサンプルコードを載せておきますね。

public class CharTypeHandlerByOracle implements TypeHandlerCallback {

/**
* {@inheritDoc}
*/
public Object getResult(ResultGetter getter) throws SQLException {
String result = getter.getString();
return result;
}

/**
* {@link OraclePreparedStatement#setFixedCHAR(int, String)}を実行する。
* {@inheritDoc}
*/
public void setParameter(ParameterSetter setter, Object parameter) throws SQLException {
String str = (String) parameter;
OraclePreparedStatement oracleState = (OraclePreparedStatement) setter.getPreparedStatement();
oracleState.setFixedCHAR(setter.getParameterIndex(), str);
}

/**
* {@inheritDoc}
*/
public Object valueOf(String s) {
return s;
}

}


*** sql-map-config.xml ***


<typeHandler
javaType="java.lang.String"
callback="jp.caravelmap.ws.sqlmap.engine.type.CharTypeHandlerByOracle"
jdbcType="CHAR" />

スキルアップ/キャリアアップ(JOB@IT)