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

2nbm6dog  于 2022-12-07  发布在  其他
关注(0)|答案(7)|浏览(117)

有人能帮助我通过JDBC在MySql数据库中存储日期的示例JSP代码吗?当我尝试执行下面给出的代码时,我得到了以下异常:
com.mysql.jdbc.MysqlDataTruncation:数据截断:日期时间值不正确:“”,用于第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);
}
bzzcjhmw

bzzcjhmw1#

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

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日期转换为java.sql.Date,并使用另一种方法:

preparedStatement.setDate(4,dateDB);
tuwxkamq

tuwxkamq2#

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

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

m3eecexj3#

尝试重新格式化日期

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

然后插入到数据库中。请注意,request.getParameter(“date”)的格式应该是11/20/2013,这样才能正常工作,或者您可以使用类似的方法来实现。

vfh0ocws

vfh0ocws4#

请确定您尝试插入数据表中的Date值完全符合数据表日期数据行中定义的格式。

ruarlubt

ruarlubt5#

我知道这是一个老问题,但这些解决方案都没有为我解决这个问题。对我有效的是将Hibernate升级到5.2.10.Final版本(参见this SO post)。
运行Spring启动和Spring Data JPA 1.5.4.发布和休眠5.2.10.最终版。

wxclj1h5

wxclj1h56#

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

@Temporal(TemporalType.TIMESTAMP)
private Date dateField;

应该是这样的:

@Temporal(TemporalType.TIME)
private Date dateField;

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

ffvjumwh

ffvjumwh7#

接受的答案只处理日期,而不是日期时间。无论如何...
我的问题是它不接受真正旧的日期时间。我在.net环境中生成了日期,默认日期是“1900-01-01 01:01:01”。我不得不将日期更改为更晚的时间...哎呀。
我的错误消息:

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '1900-01-01 01:01:01' for column 'added' at row 1

相关问题