繁体   English   中英

数据截断:错误的日期时间值:“

[英]Data truncation: Incorrect datetime value: ''

谁能通过示例JSP代码帮助我,以通过JDBC在MySql数据库中存储日期? 当我尝试执行下面给出的代码时,出现以下异常:

com.mysql.jdbc.MysqlDataTruncation:数据截断:不正确的datetime值:第1行的'date'列的''

如何克服这个问题? 以下是我的代码:

Connection con = null;

String StaffName = request.getParameter("StaffName");
// String subcode = request.getParameter("subcode");
String hourId = request.getParameter("hourId");
if (hourId == null)
    hourId = "";
String day = request.getParameter("day");
if (day == null)
    day = "";
String date = request.getParameter("date");
try {
    Class.forName("com.mysql.jdbc.Driver");
    con = DriverManager.getConnection("jdbc:mysql://localhost:3306/StaffAllocation", "root", "success");

    // PreparedStatement stat = con.PrepareStatement();
    String updateString = "INSERT INTO tblstaffallocation (StaffName,hourId,daysId,date) VALUES (?,?,?,?)";
    PreparedStatement preparedStatement = con.prepareStatement(updateString);

    preparedStatement.setString(1, StaffName);
    preparedStatement.setInt(2, 0);
    preparedStatement.setInt(3, 0);
    preparedStatement.setString(4, date);
} catch (Exception e) {
    out.print(e);
}

要将日期设置为准备好的语句,您需要更改值的类型:

String date = request.getParameter("date");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); // your template here
java.util.Date dateStr = formatter.parse(date);
java.sql.Date dateDB = new java.sql.Date(dateStr.getTime());

现在将String date转换为java.sql.Date并使用另一种方法:

preparedStatement.setDate(4,dateDB);

我有一个类似的错误。 事实证明,我只需要更新mysql-connector-java的jar版本(使用Maven)

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>...</version>
    </dependency>

尝试重新设定日期

   String date = new SimpleDateFormat("yyyy-MM-dd")
                             .format(new Date(request.getParameter("date")));

然后插入数据库。 请注意,request.getParameter(“ date”)的格式应为2013年11月20日,否则您可以使用类似的方式来实现。

确保您尝试插入表中的“日期”值与表中“日期”列中定义的格式完全相同。

在此处输入图片说明

如果有人将实体字段的数据类型标注为@Temporal错误类似,则对我来说,解决方案是将TemporalType.TIMESTAMP的标注值替换为TemporalType.TIME

@Temporal(TemporalType.TIMESTAMP)
private Date dateField;

应该是这样的:

@Temporal(TemporalType.TIME)
private Date dateField;

解决此问题的另一种方法而无需更改代码(至少对我而言)(至少对我而言)是在更高的Tomcat版本上运行应用程序,希望它会有所帮助。

我知道这是一个旧线程,但是这些解决方案都无法为我解决问题。 对我有用的是将休眠模式升级到5.2.10.Final版本(请参阅此SO post )。

运行Spring Boot和Spring Data JPA 1.5.4.RELEASE和hibernate 5.2.10.Final。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM