2009年10月20日火曜日

javaのsqlアクセスメソッドgetStringで文字化け?

通常、javaを使ってデータベースにアクセスするには、java.sqlのStatement変数のexecuteQueryメソッドを使用します。そして、このexecuteQueryメソッドで得られたResultSet変数を元に、レコード位置を指定したり、データを取り出します。
データを取り出すには、得られたResultSet変数のgetStringメソッドを使うケースが多いと思います。Yawdbaでも、同様の方法でMSAccessデータベースからデータを取り出していましたが、日本語文字データで文字化けが発生しました。どうも、日本語文字の奇数バイト目でデータが切れているために文字化けが発生しているように思われました。getStringと言うメソッド名からすると問題ないように思われますが、どう言う訳か、文字化けが発生しました。

別の方法がないか試行錯誤した結果、現在は次のような方法でデータをアクセスしています。現在のところ、問題なく動作しています。

取得するデータが文字列の場合には、getStringメソッドではなく、getCharacterStreamメソッドを使います。getCharacterStreamメソッドでjava.io.Reader変数を取得し、このReader経由で文字列を取得しています。この方法では、問題なくデータ取得ができるようになりました。

MSAccessデータベース内のデータは、外部のファイルとみなすべきであり、getCharacterStreamで取り出すべきかもしれません。しかし、本来、外部インタフェースとJava内部の処理との間でこれらの面倒を見るべきは、jdbcのような気がします。ひょっとすると、これは、利用したjdbcドライバ(odbcドライバ)の問題かもしれません。

2 件のコメント:

  1. はじめまして。私は新米プログラマーなんですが、現在javaとAccessを接続させてwebページを作成しています。

    作成中myQED様と同じ同じく、文字コードの設定はちゃんとなっていると思われるのに、日本語の取得がうまくいきません。

    それで、こちらに書かれている通りにgetCharacterStreamメソッドで経由でStringにし表示させようと思うのですが、うまくいきません。

    もしよろしければコードをのせて頂けないでしょうか?
    よろしくお願いします。

    返信削除
  2. 管理人です。コメントありがとうございます。サンプルプログラムをブログに追加しました。このURLを参考に見てください。http://shoushin.blogspot.com/2010/08/javasqlgetstring.html

    返信削除