(続) Oracle での文字化け対策

とりあえず、以下のような方法で大丈夫そう.
#素直に DB 側で JIS16SJISTILDE を使えれば何もしなくてもいいんだが…

OracleResultSet, OracleResultSetFactory を用意し,どっかの DI に以下を記述する

	<component class="example.OracleResultSetFactory">
		<initMethod>
			@org.seasar.extension.jdbc.impl.BasicSelectHandler@register(#self)
		</initMethod>
	</component>

OracleResultSet, OracleResultSetFactory は以下のような単純なもの

package example;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.seasar.extension.jdbc.impl.ResultSetWrapper;

public class OracleResultSet extends ResultSetWrapper {

    private static final int WAVE_DASH = 0x301c;

    private static final int FULLWIDTH_TILDE = 0xff5e;

    public OracleResultSet(ResultSet resultSet) {
        super(resultSet);
    }

    public String getString(int columnIndex) throws SQLException {
        return convert(super.getString(columnIndex));
    }

    public String getString(String columnName) throws SQLException {
        return convert(super.getString(columnName));
    }

    private String convert(String source) {
        StringBuffer result = new StringBuffer();
        char ch;

        for (int i = 0; i < source.length(); i++) {
            ch = source.charAt(i);

            switch (ch) {
                case WAVE_DASH: // 〜 WAVE DASH -> FULLWIDTH TILDE
                    ch = FULLWIDTH_TILDE;
                    break;
                default:
                    break;
            }

            result.append(ch);
        }

        return result.toString();
    }

}

OracleResultSetFactory

package example;

import java.sql.PreparedStatement;
import java.sql.ResultSet;

import org.seasar.extension.jdbc.impl.BasicResultSetFactory;

public class OracleResultSetFactory extends BasicResultSetFactory {

    public ResultSet createResultSet(PreparedStatement ps) {
        return new OracleResultSet(super.createResultSet(ps));
    }

}