Java中为啥将java.util.Date类型的变量已转换为java.sql.Date,进行插入操作时仍报错?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中为啥将java.util.Date类型的变量已转换为java.sql.Date,进行插入操作时仍报错?相关的知识,希望对你有一定的参考价值。
代码如下:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(new java.sql.Date(format.parse("2010-10-9").getTime()));
输出:2010-10-09
例如:
<%@ import="java.util.*"%>
<%@ import="java.text.*"%>
<%
SimpleDateFormat sdf=new SimpleDateFormat("MMMMM d,yyyy HH:mm:ss",Locale.ENGLISH);
out.print(sdf.format(new Date()));
%>追问
在Java SE的环境中操作数据库,数据库中某一字段类型为Date,插入数据时需将java.util.Date类型的变量转换为java.sql.Date,否则报错,但是转换了以后输出格式正确,插入时报错。
数据库中字段的类型为Date,不转换为java.sql.Date类型会提示出错,但转换了以后插入数据时异常报错
追答你用什么工具 myeclipse ? 设置一个断点 数据库用的是什么 ? 错误信息能发一下看看吗 ?
追问SQL Server 2008R2,代码如下:
state.setDate(4, new java.sql.Date(ele.getHiredate().getTime()));
//ele是一个对象,所得到的属性类型为java.util.Date
执行报错:java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]没有执行可选特性
你在百度中输入 “ODBC SQL Server Driver ” 会有很多相关的错误提示 我工作这么多年用的都是oracle, SQL server 毕业就没碰过了 真的很抱歉 不能帮上什么忙了 ....
追问问题现已解决,虽然你的回答没帮上什么忙,但还是很感谢你,采纳一下
本回答被提问者采纳 参考技术C 你不转,插入就不报错了啊 参考技术D 1、请转换成java.util.Date2、实体类请实现Serializable接口
无法将 java.lang.String 类型的属性值转换为所需的 java.util.Date 类型
【中文标题】无法将 java.lang.String 类型的属性值转换为所需的 java.util.Date 类型【英文标题】:Failed to convert property value of type java.lang.String to required type java.util.Date 【发布时间】:2014-07-05 07:20:17 【问题描述】:当我尝试在表单中输入日期时出现此错误。
任务控制器
@RequestMapping(value = "/docreatetask", method = RequestMethod.POST)
public String doCreateTask(Model model, @Valid Task task,
BindingResult result, Principal principal,
@RequestParam(value = "delete", required = false) String delete)
System.out.println(">TaskController doCreateTask " + task);
if (result.hasErrors())
System.out.println("/docreatetask in here");
model.addAttribute("task", task);
System.out.println("+++++"+task.getDeadline());// deadline is null
return "createtask";
...
创建.jsp
...
<form:form method="POST"
action="$pageContext.request.contextPath/docreatetask"
commandName="task">
<table class="formtable">
<tr>
<td class="label">Task</td>
<td><form:input cssClass="control" path="taskname"
name="taskname" type="text" /><br />
<form:errors path="taskname" cssClass="error" /></td>
</tr>
<tr>
<td class="label">Description</td>
<td><form:textarea cssClass="control" path="description"
name="description"></form:textarea><br />
<form:errors path="description" cssClass="error" /></td>
</tr>
<tr>
<td class="label">Deadline (dd/mm/yyyy)</td>
<td><form:input cssClass="control" path="deadline"
name="deadline" type="date" /><br />
<form:errors path="deadline" cssClass="error"></form:errors></td>
</tr>
...
在控制器中,我写了以下相同的错误(以及不同的格式,如“yyyy/MM/dd”)
@InitBinder
public void initBinder(WebDataBinder webDataBinder)
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
dateFormat.setLenient(false);
webDataBinder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
我也尝试在类中添加注释(以及不同的格式)但同样的错误
...
@Column(name = "deadline")
@DateTimeFormat(pattern = "dd/MM/yyyy")
private Date deadline;
...
【问题讨论】:
发布你的 JSP 代码。 我想,我发现了错误。我将 new SimpleDateFormat("dd/MM/yyyy") 更改为 new SimpleDateFormat("yyyy-MM-dd") 模式应该是"yyyy-MM-dd"
。小心 MM(月)和 mm(分钟)。
是的,很抱歉拼写错误
【参考方案1】:
在控制器中添加这个。将 dateFormat 更改为您的区域设置首选项。
@InitBinder
public void initBinder(WebDataBinder binder)
binder.registerCustomEditor( Date.class,
new CustomDateEditor(new SimpleDateFormat("dd/MM/yyyy"), true, 10));
考虑在您的模型中使用此注释(根据您的喜好调整格式和 TemporalType)
@DateTimeFormat(pattern = "dd/MM/yyyy")
@Temporal(TemporalType.DATE)
【讨论】:
如果您需要将自己的 DateFormat 提供给 CustomDateEditor 绑定,这如何与 @DateTimeFormat 的模式参数相关联? @ DateTimeFormat 如果您再次将该字段转换为字符串,可能会有所帮助。例如。 (转换为 XML、Json 等)或仅在 JSP @Temporal 中获取属性将控制您是否将该字段存储为数据库中的 DATE 或 DATETIME 字段。 @borjab,非常感谢!我完全忘记了 initBinder……你为我节省了很多时间! 如何使用 InitBinder 为OffsetDateTime.class
注册自定义编辑器?【参考方案2】:
只需将@DateTimeFormat(pattern = "yyyy-MM-dd") 与 (-) 相加
示例:
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date dateNaissance;
【讨论】:
嗯,我认为这个答案是不必要的,因为这是从 2 年前开始的。 但它帮助了我 ;-) 这种情况下我该怎么办"2021-05-27 12:46:17"【参考方案3】:@DateTimeFormat(pattern = "yyyy-MM-dd")
用这个替换你的格式。
【讨论】:
【参考方案4】:你需要在 BaseController 中更改 initBinder
@InitBinder
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder)
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, null, new CustomDateEditor(dateFormat, true));
【讨论】:
以上是关于Java中为啥将java.util.Date类型的变量已转换为java.sql.Date,进行插入操作时仍报错?的主要内容,如果未能解决你的问题,请参考以下文章
无法将 java.lang.String 类型的属性值转换为所需的 java.util.Date 类型
无法将 java.lang.String 类型的值转换为所需的 java.util.Date 类型
将java.util.Date类型转换成json时,使用JsonValueProcessor将date转换成希望的类型