在servlet中使用DOB的下拉列表给出错误的输出

时间:2016-02-22 10:29:00

标签: java mysql jsp servlets java.util.date

我正在尝试使用Netbeans,MySQL和Tomcat在Servlet中为DOB和DOJ编写代码。

问题是当我保存它进入MySQL表的日期但日期自动更改。我正在使用3下拉框 - dd mm yyyy并假设我选择24 12 1973并保存,但日期已被MySQl表更改为 - 1974-01-24。这就是我所做的(可能是错的)

来自servlet1.java

首先从MySQL表格的日期类型DOB列中获取日期

java.sql.Date Dob=rno.getDate(5);
String Dob1=Dob.toString();

然后在数组中提取日期和年份

char number;
int  a1[];
a1=new int[3];
a1[0]=0;
a1[1]=0;
a1[2]=0;
for( j=0;j<Dob1.length();j++)
{
   number=Dob1.charAt(j);
   if(Character.isDigit(number))
   {
      a1[i]=(a1[i]*10)+Integer.parseInt(new Character(number).toString());
   }
   else
   {
      i++;
   }    
}

在下拉列表中显示提取的值,并根据需要进行修改选项 a1 [2]为一天

pw.println("<th>&nbsp;&nbsp;&nbsp;Date Of Birth&nbsp;</th>");
pw.println("<td>&nbsp&nbsp;&nbsp;&nbsp<select name=day1><option value="+a1[2]+" >"+a1[2]+ "");
pw.println("<option value=1>1</option><option value=2>2</option><option value=3>3</option>"
   + "<option value=4>4</option><option value=5>5</option><option value=6>6</option>"
   + "<option value=7>7</option><option value=8>8</option><option value=9>9</option>"....
pw.println("</select>");

a1 [1]月份

pw.println("<select name=month1><option value="+a1[1]+" >"+a1[1]+ "<option   value=1>1</option>");
pw.println("<option value=2>2</option><option value=3>3</option><option value=4>4</option>"
   + "<option value=5>5</option><option value=6>6</option><option value=7>7</option>"
   + "<option value=8>8</option><option value=9>9</option><option value=10>10</option>"
   + "<option value=11>11</option><option value=12>12</option> "
   + "</select>");
年份

a1 [0]

pw.println("<select name=year1><option value="+a1[0]+" >"+a1[0]);
pw.println("<option value=77>1977</option><option value=78>1978</option><option value=79>1979</option><option value=80>1980</option>"+"<option value=81>1981</option><option value=82>1982</option><option value=83>1983</option><option value=84>1984</option>"
 +"<option value=85>1985</option><option value=86>1986</option><option value=87>1987</option><option value=88>1988</option>"
 +"<option value=89>1989</option><option value=90>1990</option><option value=91>1991</option><option value=92>1992</option>"
 +"<option value=93>1993</option><option value=94>1994</option><option value=95>1995</option><option value=96>1996</option>"
 +"<option value=97>1997</option><option value=98>1998</option><option value=99>1999</option><option value=100>2000</option>"
 +"<option value=101>2001</option><option value=102>2002</option><option value=103>2003</option><option value=104>2004</option><option value=105>2005</option>");
pw.println("</select>(dd/mm/yyyy)</td></tr>");

修改后将数据发布到servlet2.java以存储在表

int day1=Integer.parseInt(req.getParameter("day1"));
int month1=Integer.parseInt(req.getParameter("month1"));
int year1=Integer.parseInt(req.getParameter("year1"));
Date DOB= new Date(year1,month1,day1);
Class.forName("com.mysql.jdbc.Driver");
Connection c =   DriverManager.getConnection("jdbc:mysql://localhost:3306/xe","root", "");  
PreparedStatement ps=c.prepareStatement("Update Employee Dob=? where   Emp_id=?");
ps.setDate(5,DOB);
int j=ps.executeUpdate();

现在,自从过去3到4个小时后,我对这段代码的打击失去了希望,但无法弄清楚为什么日期会发生变化。如果有人指导我,那么我就会知道我的错误。

2 个答案:

答案 0 :(得分:0)

在您的servlet中,

String selectedDate = req.getParameter("pickedDate");

最后,您需要将String日期修改为Java日期格式,

public Date convertStringToDate(String selectedDate) {
    SimpleDateFormat formatter = new SimpleDateFormat("MM-dd-yyyy");
    Date date = null;
    try {
        date = formatter.parse(dateVal);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return date;
}

答案 1 :(得分:0)

问题出在Date类中,年份部分从1990年开始,所以到2000年你应该把2000-1990和月份从0开始而不是1,所以长话短说就是留下calss java.sql。单独使用日期构造函数并像这样使用simpleDateFormat

SimpleDateFormat format= new SimpleDateFormat("y-M-d");
java.util.Date date =format.parse(year1+"-"+month1+"-"+day1);

你准备好了

修改

准备好的语句在其Date参数中需要一个java.sql.Date你可以尝试这个代码我想我会工作

    java.sql.Date date = java.sql.Date.valueOf(year1+"-"+month1+"-"+day1);
    statement.setDate(1, date);//not setDate(5,date);