[前][次][番号順一覧][スレッド一覧]

mysql:5236

From: "TAKAHASHI, Tomohiro" <"TAKAHASHI, Tomohiro" <t_takahashi@xxxxxxxxxx>>
Date: Wed, 13 Mar 2002 00:41:04 +0900
Subject: [mysql 05236] Re: MySQL + JDBC で SJIS 処理

  高橋(智)です。

wolfgang@xxxxxxxxxx wrote:
> 
> >私がメンテしているJDBCドライバであれば対応可能ですよ。
> ありがとうございます。しかし、"文字化けが発生しないようにあらかじめ修正
> を加えたSQL文" ということは、実行するSQLの文字を全てチェック(2byte目に\
> があるかどうか)して、もし\が含まれていたら何かしらの変更を・・・?
> 原理的には、実行するSQLの文字だけをチェックするのでしょうか?

  まず、StatementやPreparedStatementに渡されて来るSQL文はUNICODEですから、
そのUNICODE(String)を シフトJISのバイト配列(byte[])に変換した後に、MySQL
サーバへと送信する処理が既に入っています。

  で、Statementに直に渡されるSQL文では、バイト配列(byte[])のどの部分の文
字列をチェックしたらよいのか判定が難しい(というか無駄)なので、これはSQL文
を生成する側の責任にしたいですね。(^^;
  statement.executeQuery("delete from table where a='表\\'");
というように。

  次に、PreparedStatementですが、このinterfaceであれば setString(...);
というメソッドに全ての処理を集中させられるので楽です。
  --- 擬似コード -----
  public void setString(int parameterIndex, String x) {
    if( シフトJISで送信するなら )
    {
      byte[] buf = x.getBytes(encoding); // i.e. "Shift_JIS"
      buf = add5CAfter5C(buf);           // 必要に応じて\を付加する
      x = new String(buf, 0, buf.length, encoding);
    }
    ...
  }
  --- 擬似コード -----


  現在、ResultSetにスクロール機能(変更は非検知)を入れ終わってテスト
している段階なので、それが終わりしだい実装の検討に入りたいと思います。
(ドライバに渡すプロパティを追加して、それを鈴木様専用フラグとしたい
です)
  これで mm mysql Driver に機能的には肩を並べるハズ。(^^)


> それともDBから返されたResultSet(+ RowSet )の中の文字もチェックするのでしょ
> うか? 後者なら、DBからの結果が肥大したときに、かなり重くなると思うので
> すがどうなんでしょうか?

  チェックしません。
  JDBC Driverが送信するSQL文にのみ問題があるからです。


P.S.
  さて、明日からパシフィコ横浜でSun Tech Daysが開催されます。
  赤いフリースと赤いTシャツとジーパンでうろうろしてますので、
参加される方がいましたら気軽に声をかけてください。

-- 
高橋智宏
  Java読書会( http://www.t3-jpn.com/bof/ )
  T3-Japan( http://www.t3-jpn.com/ )

[前][次][番号順一覧][スレッド一覧]

      5224 2002-03-06 03:01 [<wolfgang@xxxxxxxxxx] MySQL + JDBC で SJIS 処理               
      5226 2002-03-06 19:28 ┗["TAKAHASHI, Tomohiro]                                       
      5227 2002-03-08 02:47  ┗[とみたまさひろ <tomm]                                     
      5228 2002-03-09 11:23   ┗["TAKAHASHI, Tomohiro]                                   
      5229 2002-03-11 02:24    ┗[<wolfgang@xxxxxxxxxx]                                 
      5231 2002-03-11 21:59     ┣["TAKAHASHI, Tomohiro]                               
      5232 2002-03-11 22:09     ┗["TAKAHASHI, Tomohiro]                               
      5233 2002-03-12 12:13      ┗[<wolfgang@xxxxxxxxxx]                             
->    5236 2002-03-13 00:41       ┗["TAKAHASHI, Tomohiro]                           
      5237 2002-03-13 22:44        ┣["TAKAHASHI, Tomohiro]                         
      5245 2002-03-14 18:00        ┗[<wolfgang@xxxxxxxxxx]                         
      5246 2002-03-15 00:02         ┗["TAKAHASHI, Tomohiro]