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

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

0

サーブレットによるMySQLの更新がうまくできません

こんばんは

現在、JSPのフォームから受信した文字を使ってサーブレットでデータベース更新をしようとしているのですが、日本語が"???????"と書き込まれてしまいます。(エラーにはなっていません)

update文の時のみこういった現象がおきて、INSERT文でデータを追加するときには問題なく実行ができます。

図書館の貸し出しシステムみたいなものを作ろうとしています。
開発環境はeclipseで、OSはWindows10です。

よろしくお願いします。

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class Rental
 */
@WebServlet("/Rental")
public class Rental extends HttpServlet {
    private static final long serialVersionUID = 1L;

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

    public void init()throws ServletException{

        try {
            Class.forName("com.mysql.jdbc.Driver");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    Connection con = null;
    Statement stmt = null;
    ResultSet rs = null;
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {




//セッションからユーザー名を取得する
        HttpSession session = request.getSession(true);
        request.setCharacterEncoding("UTF-8");



        String user_name = (String)session.getAttribute("user_name");
//共有物のIDを取得
        int ID = Integer.parseInt(request.getParameter("ID"));
//コメントを取得
        String comment = request.getParameter("comment");
//日付を取得
         Date d = new Date();
         Calendar cal = Calendar.getInstance();
         cal.setTime(d);
         cal.add(Calendar.DATE,7);
         d=cal.getTime();
         System.out.println("返却予定日:"+d);

//日付のフォーマット変更
         SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
         System.out.println("フォーマット後の現在時刻:"+date.format(d));


        try{
            con = DriverManager.getConnection("jdbc:mysql://localhost/フォルダ名",);

            String sql = "update management set loan='貸出中',borrowers='"+user_name+"',comment='"+comment+"',return_date='"+date.format(d)+"' where ID='"+ID+"'";



            System.out.println(sql); //SQL文表示
            stmt =con.createStatement();
            stmt.executeUpdate(sql);

//            rs = stmt.executeQuery();

          //データベースとの接続をクローズ
            try{rs.close();}catch(Exception e){}
            try { stmt.close(); } catch (Exception e) {}
            try { con.close(); } catch (Exception e) {}


    }catch(Exception e){
                e.printStackTrace();

    }

        RequestDispatcher dispatcher =
                request.getRequestDispatcher("Management.jsp");
                dispatcher.forward(request, response);

    }

}

2

回答

513

閲覧

2件の回答

評価

0

DB作ったときのエンコーディングは?それを接続URLに指定してもだめ?

評価

0

回答ありがとうございます。


SQLの文字コード関係は問題なかったのですが、データベース接続時のURL指定にて「useUnicode=true&characterEncoding=utf8";」の部分が抜けていました。

無事に解決でき、非常に助かりました。
ありがとうございました。

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