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

Posted

技术标签:

【中文标题】数据截断:不正确的日期时间值:\'\'【英文标题】:Data truncation: Incorrect datetime value: ''数据截断:不正确的日期时间值:'' 【发布时间】:2013-12-04 00:35:29 【问题描述】:

谁能帮助我提供一个示例 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);

【问题讨论】:

请写一些代码。 @jhanvi 请检查一下 【参考方案1】:

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

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

【讨论】:

标记当我尝试时,它显示错误说明“PreparedStatement 类型中的方法 setDate(int, Date) 不适用于参数 (int, Date)” 使用 java.sql.Date,而不是 java.util.Date =) 你的意思是像这样的 java.sql.Date date = new java.sql.Date(); 当我尝试它向我显示此错误“构造函数 Date() 未定义” 并且不要忘记添加检查 null 和空字符串!【参考方案2】:

我遇到了类似的错误。原来我只需要更新 mysql-connector-java 的 jar 版本(使用 maven)

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

【讨论】:

你救了我的命!我使用的是带有 mysql-connector 3.3.1 的 MySQL 5.7 DB。更改为 mysql-connector-5.x 可解决此问题。在这里下载:mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.39 我相信版本号在任何一个方向都可能不正确,不同的人可能需要不同的版本号——这取决于你的情况。这就是为什么我没有在答案中注明具体版本号的原因。【参考方案3】:

尝试重新设置日期

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

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

【讨论】:

如果无法按照@Kimball Robinson 的回答更新依赖项 jar,这将很有帮助。【参考方案4】:

确保您尝试插入表格的日期值与表格日期列中定义的格式完全一致。

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】:

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

@Temporal(TemporalType.TIMESTAMP)
private Date dateField;

应该是这样的:

@Temporal(TemporalType.TIME)
private Date dateField;

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

【讨论】:

以上是关于数据截断:不正确的日期时间值:''的主要内容,如果未能解决你的问题,请参考以下文章

日期时间值不正确 数据库错误号:1292

#1292 运行查询时 MySQL 中不正确的日期时间值错误

日期时间格式无效:1292 日期时间值不正确 [重复]

日期时间格式无效:1366 字符串值不正确

如何在 Oracle 中将日期截断为秒

使用 str_to_date 函数从文件中将数据加载到 MySQL 中的日期时间值不正确