skillup

技術ブログ

Java

データベース文字コード対策他

投稿日:2015年9月6日 更新日:

JDBC文字化け対策

データベースがutf8以外の文字コードになっていたりして通常通りデータを操作すると化けることが発生。

まあPHPの時だとしょっちゅうだったんですがJPAになってからそういうケースに遭遇していませんでした。

私の場合DBがlatin1になってて、他のデータベースもあるので設定ファイルをこわくて修正できない、なんてケース。

そんなときでもutf8で入れてutf8で見れればいいんですが、JPAではディフォルトではどうやらDBへの接続は接続先の文字コードで参照するようです。(???になっている。ということはlatin1で参照しているということでしょう。)

insertしたら思いっきり化けていました。

下記のように対策したところなんとか無事に対応

URLに接続するときに文字コードを指定してあげればutf8でしっかりとinsertできるようです。

GlassfishのJDBC接続poolのURLで下記のように引数を付けてあげればOKです。

jdbc:mysql://DBのURL:ポート番号/DB名?useUnicode=true&characterEncoding=utf8

参考リンク

[Java] JDBCでMySQLにデータを追加すると文字化けする場合の対処法

ちなみに以前紹介した文字コード判定のライブラリ(juniversalchardet)なんですが、マルチバイトが一切ないと文字判定ができずnullでエラーになります。

その場合は初期値でutf8などにしておくとよいでしょう。

BigDecimal

Javaでは小数点の切り上げ、切捨て、四捨五入なんかを使うときにBigDecimalを使います。

その使用法に対して。

ソース

参考リンク

CreateQuery

日付がらみの処理をしているときにどうしてもJPQLでわからない処理がでてきており、MySQLを使いたい!となりました。

そんな時はエンティティマネージャーのcreateQueryを使えば大丈夫です。が、いろいろデメリットはあるでしょうね。

対処法的な感じで考えており、いずれはJPQLに直さないとまずいなあと思っております。

ちなみにJPQLのクエリに関して下記リンクに細かくメリット、デメリットが書かれています。

参考リンク

NativeQueryじゃだめ?〜JPAクエリ表現ごとのパフォーマンス比較

jsfのconvertNumber

jsfのconvertNumber(数字の整形のタグ。たとえば100000→100,000にしたいなど)は引数が数字(int型)じゃないと反映されません。

まあNumberとなっているので当たり前でしょうか・・・

-Java
-, ,

執筆者:


  1. yamamoto より:

    せっかくBigDecimalを使っているので、特段の理由がない限りは、BigDecimalのインスタンスで返すように設計してみてくださいな。

  2. matsumoto より:

    アドバイスありがとうございます。

    BigDecimalについてわかっていませんでしたね(汗)。修正しました。

comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

文字列変換系処理まとめ

Javaで文字列の変換(全角、半角など)の処理のまとめです。 ブログに記事として書こうと思ったのですが、丸々コピペになってしまうので、それじゃあ元リンクを紹介したほうがいいかなと思い、今日は基本的にリ …

no image

便利すぎる道具の弊害

現在、Javaのプロジェクトでは会社でNetbeansを使っていますが、IDEを使っているばっかりに理解できていないところがありました。便利すぎる道具の弊害ですね・・・ IDEについて一応説明をしてお …

no image

配列の初期化&代入+Mapから別Map作成

最近、業務ではコードの量が肥大化し、とにかく短く書くことを心がけてます。 まあ、短ければいいってもんでもないんですが・・・ Listにクラスを使いするときに↓みたいな書き方を紹介したんですが、 [cr …

no image

GlassFish&Junitの不具合

JavaEE(JSF+JavaBean+EJB+JTA)でアプリを製作しているのですが、EJBの部分のjunitができないことが判明しました。 正確に言うとラムダ式を使うと不具合がでます。原因としては …

no image

glassfishへのデプロイ

いつもJavaEE環境のローカル開発ではNetbeansで動かしてますんで、デプロイに関してglassfishのことをほとんど知らなくても動かせます。 開発や本番環境化では当然そういうわけには行かない …