数据截断:不正确的日期时间值:“”

问题描述 投票:9回答:6

谁能帮我用一个样本JSP代码来存储日期通过JDBC MySQL数据库?当我尝试执行下面给出的代码,我得到下面的异常:

com.mysql.jdbc.MysqlDataTruncation:数据截断:不正确的日期时间值:“在列1”列“日期”

如何解决这个问题?以下是我的代码:

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);
}
java mysql jsp datetime jdbc
6个回答
16
投票

要设置日期,你需要改变的值类型准备的语句:

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());

现在字符串转换日期java.sql.Date和使用另一种方法:

preparedStatement.setDate(4,dateDB);

12
投票

我有一个类似的错误。原来,我只需要更新的MySQL连接器的Java的jar版本(使用maven)

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

3
投票

请尝试重新格式化日期

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

然后插入到数据库中。需要注意的是用request.getParameter(“DATE”)应在格式2013年11月20日这个工作,或者你可以用类似的方式来实现。


1
投票

请确保您要插入到表中的日期值是完全在你的表的日期列定义的格式。

enter image description here


0
投票

如果有人将有一个与注释为@Temporal数据类型实体场类似的错误,对我来说,解决办法是通过TemporalType.TIMESTAMP更换注释值TemporalType.TIME

@Temporal(TemporalType.TIMESTAMP)
private Date dateField;

应该是这样的:

@Temporal(TemporalType.TIME)
private Date dateField;

解决没有改动任何代码这个问题的另一种方法(至少对我来说)是较高的Tomcat版本上运行的应用程序,希望这将有助于。


0
投票

我知道这是一个古老的线程,但这些解决方案解决了这个问题对我来说。什么工作对我来说是休眠升级到版本5.2.10.Final(见this SO post)。

运行春季引导和Spring数据JPA 1.5.4.RELEASE和休眠5.2.10.Final。

© www.soinside.com 2019 - 2024. All rights reserved.