0

Java サーブレット プログラムを作成しましたが、実行すると、エラー HTTP Status 500 - java.util.Date cannot be cast to java.sql.Date が表示されました データベースに日付型を挿入する他の方法を検索しましたが、私はそうする方法がありませんでした.私のコードは次のとおりです:

   package skypark;
    import java.io.*;
    import javax.servlet.*;
    import java.text.*;
    import javax.servlet.http.*;
      import java.sql.*;
      import java.sql.Date;
  public class Registration extends HttpServlet
 {
  /**
   * 
   */
     private static final long serialVersionUID = 1L;
     public static Connection prepareConnection()throws ClassNotFoundException,SQLException
{
String dcn="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@JamesPJ-PC:1521:skypark";
String usname="system";
String pass="tiger";
Class.forName(dcn);
return DriverManager.getConnection(url,usname,pass);
  }
  public void doPost(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException
 {
resp.setContentType("text/html");
PrintWriter out=resp.getWriter();
try
{
String phone1,dofb,date1,month,year,uname,fname,lname,address,city,state,country,pin,email,password,gender,lang,qual,relegion,privacy,hobbies,fav;

uname=req.getParameter("uname");
fname=req.getParameter("fname");
lname=req.getParameter("lname");
date1=req.getParameter("date");
month=req.getParameter("month");
year=req.getParameter("year");
address=req.getParameter("address");
city=req.getParameter("city");
state=req.getParameter("state");
country=req.getParameter("country");
pin=req.getParameter("pin");
email=req.getParameter("email");
password=req.getParameter("password");
gender=req.getParameter("gender");
phone1=req.getParameter("phone");
lang="";
qual="";
relegion="";
privacy="";
hobbies="";
fav="";
dofb=date1 +"-"+ month +"-" + year;
int phone=Integer.parseInt(phone1);
DateFormat formatter ; 
java.util.Date dob ; 
formatter = new SimpleDateFormat("dd-MM-yy");
dob = formatter.parse(dofb); 

Connection con=prepareConnection();
String Query="Insert into regdetails values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
PreparedStatement ps=con.prepareStatement(Query);
ps.setString(1,uname);
ps.setString(2,fname);
ps.setString(3,lname);
ps.setDate(4,(Date) dob);
ps.setString(5,address);
ps.setString(6,city);
ps.setString(7,state);
ps.setString(8,country);
ps.setString(9,pin);
ps.setString(10,lang);
ps.setString(11,qual);
ps.setString(12,relegion);
ps.setString(13,privacy);
ps.setString(14,hobbies);
ps.setString(15,fav);
ps.setString(16,gender);

int c=ps.executeUpdate();

String query="insert into passmanager values(?,?,?,?)";
PreparedStatement ps1=con.prepareStatement(query);

ps1.setString(1,uname);
ps1.setString(2,password);
ps1.setString(3,email);
ps1.setInt(4,phone);

int i=ps1.executeUpdate();

if(c==1||c==Statement.SUCCESS_NO_INFO && i==1||i==Statement.SUCCESS_NO_INFO)
{
    out.println("<html><head><title>Login</title></head><body>");
    out.println("<center><h2>Skypark.com</h2>");
    out.println("<table border=0><tr>");
    out.println("<td>UserName/E-Mail</td>");
    out.println("<form action=login method=post");
    out.println("<td><input type=text name=uname></td>");
    out.println("</tr><tr><td>Password</td>");
    out.println("<td><input type=password name=pass></td></tr></table>");
    out.println("<input type=submit value=Login>");
    out.println("</form></body></html>");
}
else
{
    out.println("<html><head><title>Error!</title></head><body>");
    out.println("<center><b>Given details are incorrect</b>");
    out.println(" Please try again</center></body></html>");
    RequestDispatcher rd=req.getRequestDispatcher("registration.html");
    rd.include(req,resp);
    return;
  }
 }
  catch(ClassNotFoundException cnfe) {
  out.println("<html><head><title>Error!</title><body>");
  out.println("<b><i>Class not found "+ cnfe +"</i></b>");
  out.println("</body></html>");
} catch(SQLException sqle) {
     out.println("<html><head><title>Error!</title><body>");
      out.println("<b><i>Unable to process try after some time Sql error</i></b>");
      out.println("</body></html>");
} catch (ParseException e) {
     out.println("<html><head><title>Error!</title><body>");
      out.println("<b><i>Unable to process Parseint exc " + e +"</i></b>");
      out.println("</body></html>");
}
 /* catch(Exception e)
 {
   out.println("<html><head><title>Error!</title><body>");
  out.println("<b><i>Unable to process try after some time</i></b>");
  out.println("</body></html>");
  RequestDispatcher rd=req.getRequestDispatcher("registration.html");
  rd.include(req,resp);
  return;
}*/
out.flush();
out.close();
}
}

エラーは

 HTTP Status 500 - java.util.Date cannot be cast to java.sql.Date
type Exception report
message java.util.Date cannot be cast to java.sql.Date
description The server encountered an internal error that prevented it from fulfilling this request.
exception
 java.lang.ClassCastException: java.util.Date cannot be cast to java.sql.Date
skypark.Registration.doPost(Registration.java:67)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
 note The full stack trace of the root cause is available in the Apache Tomcat/7.0.33logs.

この問題を解決するために私を助けてください。

4

2 に答える 2

2

キャストする代わりにjava.sql.Datejava.sql.Date object

java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

次に、を使用sqlDateしますps.setDate

于 2012-12-16T19:50:06.000 に答える
2

このメソッドは引数として をPreparedStatement.setDate()期待しています。ではない がありjava.sql.Date、それを にキャストしようとしています。それはうまくいきません。キャストはオブジェクトの型を変更しません。java.util.Datejava.sql.Datejava.sql.Date

から を作成するにjava.sql.Datejava.util.Date、次を使用します

java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
于 2012-12-16T19:50:28.153 に答える