我正在做一个需要从数据库中提取数据的项目,我使用Spring MVC从数据库中构建模型以选择数据。
这是我的 JSP页面 的问题 :
<form action="result" method="get" > <table> <thead> <tr> <th>Date to select:</th> <th>Name to select:</th> <th>Type to select:</th> </tr> </thead> <tbody> <tr> <td><form:select path="listOfDates"> <form:option value="NONE"> --SELECT--</form:option> <form:options items="${listOfDates}"></form:options> </form:select> </td> <td><form:select path="listOfInstitutionsNames"> <form:option value="NONE"> --SELECT--</form:option> <form:options items="${listOfInstitutionsNames}"></form:options> </form:select> </td> <td> <form:select path="listOfInstitutionsTypes"> <form:option value="NONE"> --SELECT--</form:option> <form:options items="${listOfInstitutionsTypes}"></form:options> </form:select> </td> </tr> </tbody> <tfoot> <tr> <td><input type="submit" value="Извлечь"/></td> </tr> </tfoot> </table> </form>
如您所见,我尝试<form:select>从Spring标记库中使用。 问题: 但是当使用此 控制器 准备我的模型时 :
<form:select>
Spring
@Controller public class HomeController{ @Autowired private ControllerSupportClass controllerSupportClass; @RequestMapping(value="/search", method=RequestMethod.GET) public String search(Model model) { List<Date> listOfDates = controllerSupportClass.findAllDatesForm(); List<String> listOfInstitutionsNames = controllerSupportClass.findAllInstitutionsForm(); List<String> listOfInstitutionsTypes = controllerSupportClass.findAllTypesForm(); model.addAttribute("listOfInstitutionsTypes", listOfInstitutionsTypes); model.addAttribute("listOfInstitutionsNames", listOfInstitutionsNames); model.addAttribute("listOfDates", listOfDates); return "search"; } @RequestMapping(value ="/result", method=RequestMethod.GET) public String SecondActionPage(@RequestParam String particularDate, @RequestParam String nameOfInstitution, @RequestParam String typeName, Model model) throws Exception { if(particularDate !="" && nameOfInstitution.trim() !="" && typeName.trim()=="") { controllerSupportClass.findWithDateAndName(nameOfInstitution, particularDate, model); } else if(particularDate.trim() !="" && nameOfInstitution.trim() =="" && typeName.trim() !="") { controllerSupportClass.findWithAddedDateAndType(typeName, particularDate, model); } else if(particularDate.trim() !="" && nameOfInstitution.trim() =="" && typeName.trim() ==""){ controllerSupportClass.findWithAddedDate(particularDate, model); } else if(particularDate.trim() !="" && nameOfInstitution.trim() !="" && typeName.trim() !="") { throw new Exception("Search by choose all parameters is not exceptable"); } else { throw new Exception("You didn't put any search parameters"); } return "search"; } }
它给我这样的错误:
路径为[/ controller]的servlet [appServlet]的service()抛出异常[请求处理失败;嵌套的异常是org.hibernate.exception.GenericJDBCException:无法执行查询],其根本原因是java.sql.SQLException:值‘0000-00-00’不能表示为java.sql.Date
如果您需要我的Entity类,就在这里,我正在使用Datefrom java.util,但据我所知,我使用@Temporal注释将其从SQL转换为单位Date:
Date
java.util
@Temporal
@Entity @Table(name="CREATION_DATE") public class CreationDate implements Serializable { private int dateId; @Id @GeneratedValue(strategy=IDENTITY) @Column(name="DATE_ID") public int getDateId() { return dateId; } public void setDateId(int dateId) { this.dateId = dateId; } private int version; @Version @Column(name="VERSION") public int getVersion() { return version; } public void setVersion(int version) { this.version = version; } private Date particularDate; @Temporal(TemporalType.DATE) @DateTimeFormat(pattern="yyyy-MM-dd") @Column(name="PARTICULAR_DATE") public Date getParticularDate() { return particularDate; } public void setParticularDate(Date particularDate) { this.particularDate = particularDate; } private Date childGoSchoolDate; @Temporal(TemporalType.DATE) @DateTimeFormat(pattern="yyyy-MM-dd") @Column(name="CHILD_GO_SCHOOL_DATE") public Date getChildGoSchoolDate() { return childGoSchoolDate; } public void setChildGoSchoolDate(Date childGoSchoolDate) { this.childGoSchoolDate = childGoSchoolDate; } private Date childAdmissionDate; @Temporal(TemporalType.DATE) @DateTimeFormat(pattern="yyyy-MM-dd") @Column(name="CHILD_ADMISSION_DATE") public Date getChildAdmissionDate() { return childAdmissionDate; } public void setChildAdmissionDate(Date childAdmissionDate) { this.childAdmissionDate = childAdmissionDate; } }
假定数据类型转换的问题是因为MVC使用String,但实际类型是Date。
String
在MySql '0000-00-00'中,该日期被视为有效日期,但不能将其表示为java.sql.Date。
'0000-00-00'
如果date是'0000-00-00',则可以使用返回NULL的查询,否则使用实际值:
SELECT CASE WHEN `date`!='0000-00-00' THEN `date` END new_date FROM yourtable
或者您可以在数据源连接字符串中添加以下内容:
zeroDateTimeBehavior=convertToNull
和日期,'0000-00-00'将自动转换为NULL。