自分用メモのような日記
会社に古いDBからインポートしたcp932_japanese_ci(MS932/SJIS)なMySQLがあった。
クライアント「『㈱』とかが入った文字列突っ込むとなんか落ちます!!!」
Javaは悪くない。Javaはいい子だった。
問題はJDBCのSQLパーサーらしい。おのれOracleめ!!手抜きするな~!
しかし、Oracle社に恨み言言ってもしょうがない。だって無料コンポーネントだしね・・
ふと、昔BLOBなんかでバイナリ突っ込む時につかった魔法を思い出す。
文字列を16進数に変換して突っ込む魔法。
import javax.xml.bind.DatatypeConverter;
private String toHexString(String value)
{
try
{
byte[] data = value.getBytes("Windows-31J");
String hex = DatatypeConverter.printHexBinary(data);
if (hex.length() > 0) {
return "0x" + hex;
}
return "''";
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
return "'" + value + "'";
}
バインドする部分に噛ましたら16進数な文字列になって登録されてしまった・・・。
そりゃそうよね・・・。
なので、prepareするところに直に入れ込むことにした。
無事動いた。ひゃっほー!!
(バインドしなくていいの?)
(ループさせたりするとちょっと遅くなるけど、でも落ちるよりマシじゃね?)
(だよね)
知らない。SJISなDB建てたのが悪いんだ・・・