我正在尝试使用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> Date Of Birth </th>");
pw.println("<td>   <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个小时后,我对这段代码的打击失去了希望,但无法弄清楚为什么日期会发生变化。如果有人指导我,那么我就会知道我的错误。
答案 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);