Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

DBの文字化け

DBの接続の練習をしているのですが・・・・・

DBへのアクセス、登録は出来ているのですが DBに登録されている日本語の文字が

?に化けてしまいます。

実行環境はエクリプスで、DBはMYSQLを使用しています。

テーブルは作成時に utf8を指定しています。 テーブル作成時にもutf8を指定しているのですが、文字化けを起こしてしまいます。

・・・・どなたか解決策を教えていただけないでしょうか?



import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;
import java.io.PrintWriter;
/**
 * Servlet implementation class Kaiin
 */
public class Kaiin extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public Kaiin() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request,    HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub

//文字化け対策
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
     //DB接続の指定
            String url = "jdbc:mysql://localhost/shop";
     //user名
            String user = "SHOP";
         //ホスト名
        String password = "SHOP";
        PrintWriter out = response.getWriter();
        Connection conn = null;
        String strUser="私";
        String strPass="パス";
        out.println("<html>");
        out.println("<head>");
        out.println("<title>データベーステスト</title>");
        out.println("</head>");
        out.println("<body>");
//以下DB接続の処理
//処理内容はDBに登録したデータを取ってきているというもの
        try {

         Class.forName("com.mysql.jdbc.Driver").newInstance();
         conn = DriverManager.getConnection(url, user, password);
         Statement stmt = conn.createStatement();
         String sql = "insert into user(user_Name, user_Pass) values ('"+strUser+"','"+strPass+"');";
         int num = stmt.executeUpdate(sql);
         sql = "select * from user";
         ResultSet rs = stmt.executeQuery(sql);
         while(rs.next()){
                String use = rs.getString("user_Name");
                String pass = rs.getString("user_Pass");
                out.println("<p>");
                out.println("ユーザー名:" + use + ", パス:" + pass);
                out.println("</p>");
              }

              rs.close();
              stmt.close();
            }catch (ClassNotFoundException e){
              out.println("ClassNotFoundException:" + e.getMessage());
            }catch (SQLException e){
              out.println("SQLException:" + e.getMessage());
            }catch (Exception e){
              out.println("Exception:" + e.getMessage());
            }finally{
              try{
                if (conn != null){
                  conn.close();
                }
              }catch (SQLException e){
                out.println("SQLException:" + e.getMessage());
              }
            }

            out.println("</body>");
            out.println("</html>");
          }
        }

4

回答

7649

閲覧

4件の回答

評価

0

作成時に文字コードを指定した話は出してるが、取得時のことを書いてないのはな
んで?

評価

0

取得時とは  サーブレットで表示している時のことでしょうか?  

エンコードはutf8にしています。

DBに 文字を登録する時点で  日本語が文字数分  ?で登録されてしまいます。

評価

0

何か検索はしてみたんだろうか。
「jdbc 文字化け」程度でもいろいろ引っかかるはずなんだが。

評価

0

http://osima.jp/blog/mysql-jdbc.html

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。