我试图通过jsp在mysql数据库中插入日期。使用引导日期选择器接受日期。 mysql中shipping_date和delivery_date的数据类型是date(也尝试使用datetime)。它给了我无法预料的日期错误。 请帮我解决这个问题。在此先感谢..`
这里的整个代码是:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="java.sql.*" %>
<%@page import="java.io.*" %>
<%@page import="java.text.SimpleDateFormat,java.text.DateFormat,java.text.ParseException" %>
<%@page import="java.util.Date" %>
<%@page import="java.lang.*" language="java"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Add PO Details</title>
<h1>Add New Purchase Order Details</h1>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.3.0/css/datepicker3.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.3.0/js/bootstrap-datepicker.js"></script>
</head>
<script>
$(function() {
var date = new Date();
date.setDate(date.getDate());
$('#shipping_date').datepicker({
autoclose: true,
todayHighlight: true,
format: 'yyyy-MM-dd',
startDate: date
});
$('#shipping_date').datepicker().on('changeDate', function() {
var temp = $(this).datepicker('getDate');
var d = new Date(temp);
d.setDate(d.getDate());
$('#delivery_date').datepicker({
autoclose: true,
format: 'yyyy-MM-dd',
startDate: d,
});
$('#delivery_date').datepicker().on('changeDate', function() {
var temp1 = $(this).datepicker('getDate');
var d1 = new Date(temp1);
d1.setDate(d1.getDate());
});
});
});
</script>
<body>
<form method="post" name="Form" action="" >
<%
String connectionurl="jdbc:mysql://localhost:3306/mydb";
Connection connection=null;
Class.forName("com.mysql.jdbc.Driver");
connection=DriverManager.getConnection(connectionurl,"root","root1216");
ResultSet rs1=null;
Statement s10=connection.createStatement();
rs1=s10.executeQuery("select max(pono) from podetails");
rs1.next();
int id1=rs1.getInt(1);
id1=id1+1;
%>
Enter PO number:<input type=text name=pono value="<%=id1%>" readonly><br><br>
Enter shipping date:<input type=text name=shipping_date id="shipping_date" class="form-control datepicker" required><br><br>
Product is shipped via:<input type=text name=shipped_via required><br><br>
Enter delivery date:<input type=text name=delivery_date id="delivery_date" class="form-control datepicker" required><br><br>
<center><input type="submit" name="ADD"></center>
<%
try
{
ResultSet rs=null;
PreparedStatement ps=null;
if(connection!=null)
System.out.println("Successfully connected to database\n");
else
System.out.println("Failed to connect!!!\n");
String pono1=request.getParameter("pono");
String sdate2=request.getParameter("shipping_date");
String shipped_via=request.getParameter("shipped_via");
String ddate2=request.getParameter("delivery_date");
/* SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date sdate1=sdf.parse(request.getParameter("shipping_date").toString());
java.sql.Date sdate = new java.sql.Date(sdate1.getTime() );
System.out.println("after shipping");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date ddate1 =sdf1.parse(request.getParameter("delivery_date").toString());
java.sql.Date ddate = new java.sql.Date(ddate1.getTime() );
System.out.println("after delivery");*/
int pono=Integer.parseInt(pono1.trim());
System.out.println("before insert");
ps=connection.prepareStatement("insert into podetails(pono,shipping_date,shipped_via,delivery_date)values(?,?,?,?)");
ps.setInt(1,pono);
//ps.setDate(2,sdate);
ps.setString(2,sdate2);
ps.setString(3,shipped_via);
ps.setString(4,ddate2);
//ps.setDate(4,ddate);
int i=ps.executeUpdate();
System.out.println("Data is Successfully added\n");
Statement s=connection.createStatement();
rs=s.executeQuery("select * from podetails");
while(rs.next())
{ %>
<tr>
<td><%=rs.getInt("pono") %></td>
<td><%=rs.getDate("shipping_date") %></td>
<td><%=rs.getString("shipped_via") %></td>
<td><%=rs.getDate("delivery_date") %></td>
</tr>
<br>
<%
System.out.println();}
connection.close();
rs.close();
ps.close();
}
catch(Exception e)
{
System.out.println("Unable to connect\n");
e.printStackTrace(System.out);
}
%>
</form>
</body>
</html>
答案 0 :(得分:0)
我通过使用JavaScript验证而不是引导日期选择器解决了这个问题。以下是它的代码..
<script type="text/javascript">
$(function(){
var dtToday = new Date();
var month = dtToday.getMonth() + 1;
var day = dtToday.getDate();
var year = dtToday.getFullYear();
if(month < 10)
month = '0' + month.toString();
if(day < 10)
day = '0' + day.toString();
var maxDate = year + '-' + month + '-' + day;
$('#shipping_date').attr('min', maxDate);
});
$("input[name='shipping_date']").change(function() {
$("input[name='delivery_date']").attr('min',$(this).val());
});
</script>
另外,我将shipping_date和delivery_date的输入类型更改为
<input type="date" name="shipping_date" id="shipping_date" required>