[Seasar-user:797] Re: S2JDBC でOracleのUnicode問題とうまく付き合いたい ...
B rmail.plala.or.jp suga
suga_k
2004年 6月 8日 (火) 09:53:34 JST
スガです。
On Mon, 07 Jun 2004 19:29:10 +0900
Hikaru Taniguchi <[E-MAIL ADDRESS DELETED]> wrote:
> 同じ問題で悩んでいた、とか、オレはこうした、とか、そもそもオマエそこ間違っ
> てますよ、とか…なにかいいアドバイス、頂けないでしょうか > 先輩方
一例ですけど。
変換コードを入れるところは、
org.seasar.extension.jdbc.types.StringType
の位置が良いと思います。
これを置き換えるには、まず
org.seasar.extension.jdbc.ValueType
を implements するクラスを作ります。
---------------------------
package example;
import org.seasar.extension.jdbc.ValueType;
import org.seasar.framework.util.StringConversionUtil;
public class CustomStringType implements ValueType {
public Object getValue(ResultSet resultSet, int index)
throws SQLException {
String result = resultSet.getString(index);
if (result != null) {
char[] tmp = result.toCharArray();
for (int i = 0; i < tmp.length; i++) {
if (tmp[i] = Oracle側文字) {
tmp[i] = Java側文字;
}
}
result = new String(tmp);
}
return result;
}
public void bindValue(PreparedStatement ps, int index, Object value)
throws SQLException {
String stringValue = StringConversionUtil.toString(value);
if (stringValue != null) {
char[] tmp = stringValue.toCharArray();
for (int i = 0; i < tmp.length; i++) {
if (tmp[i] = Java側文字) {
tmp[i] = Oracle側文字;
}
}
stringValue = new String(tmp);
}
ps.setString(index, stringValue);
}
}
----------------------------
どこかで (ClassLoader につき) 一回だけ、これを登録してやります。
----------------------------
import org.seasar.extension.jdbc.types.ValueTypes;
..
ValueTypes.registerValueType(String.class, new CustomStringType());
----------------------------
この方法で如何でしょう。
# いい加減ドライバで対応しろよ、という感じですが (^^;
# なんで MS932 でも Shift_JIS でもない妙なマッピングなんでしょう。
--------------------------------------------------------------
e-mail: [E-MAIL ADDRESS DELETED]
スガ
--------------------------------------------------------------
Seasar-user メーリングリストの案内