java.sql.Date へのキャスト
解決したいこと
ここに解決したい内容を記載してください。
DB登録時にutil.Date からjava.sql.Date へのキャストを行うときに
java.sql.Date へのキャストが上手くいかないです。
発生している問題・エラー
出ているエラーメッセージを入力
java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
test.TestDao.add(TestDao.java:17)
test.TestServlet.doGet(TestServlet.java:84)
javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
filter.AllFilter.doFilter(AllFilter.java:44)
または、問題・エラーが起きている画像をここにドラッグアンドドロップ
### 該当するソースコード
```//TestServlet
package test;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class TestServlet
*/
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public TestServlet() {
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
//response.getWriter().append("Served at: ").append(request.getContextPath());
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
try {
TestDao hd = new TestDao();
String actDate = "2021-06-15T16:13";
String y = actDate.substring(0, 4);
String mo = actDate.substring(5, 7);
String d = actDate.substring(8, 10);
String h = actDate.substring(11, 13);
String mi = actDate.substring(14, 16);
int year = Integer.parseInt(y);
int month = Integer.parseInt(mo) - 1;
int day = Integer.parseInt(d);
int hour = Integer.parseInt(h);
int minute = Integer.parseInt(mi);
int ss = 0;
final DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
cal.set(year, month, day, hour, minute, ss);
String date = df.format(cal.getTime());
System.out.println("date : " + date);
Date registDate = df.parse(date);
System.out.println("registDate : " + registDate);
int result = hd.add(1,1,registDate);
System.out.println(result);
request.setAttribute("result", result);
} catch (Exception e) {
e.printStackTrace();
}
getServletContext().getRequestDispatcher("http://localhost:8080/uhd_pet/test1.jsp").forward(request, response);
}
}
package test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import etc.AbstractDao;
public class TestDao extends AbstractDao{
public int add(int p_id, int s_id, java.util.Date registDate) {
int result = -1;
String sql = "insert into history (pet_id,service_id,service_date) values(?,?,?)";
try (Connection conn = getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
//コンソールではここでエラーになりました
java.sql.Date sqlDate = (java.sql.Date)registDate;
pstmt.setInt(1, p_id);
pstmt.setInt(2, s_id);
pstmt.setDate(3,sqlDate);
result = pstmt.executeUpdate();
} catch (SQLException | ClassNotFoundException e) {
e.printStackTrace();
}
return result;
}
}
### 自分で試したこと
ここに問題・エラーに対して試したことを記載してください。
色々キャストに関して調べてみたのですが解決できませんでした。
どなたかわかる方宜しくお願いします。
0 likes