如何在Mysql数据库中避免'数据被截断'使用java? [英] How to Avoid 'Data truncated for column' in Mysql Database Using java?

查看:633
本文介绍了如何在Mysql数据库中避免'数据被截断'使用java?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的Java程序中,..Hibernate Bean类定义了一个类似于..

In my Java Program ..Hibernate Bean class define one column like..

TimtableVO.java

@Column(name="REPEAT_DAYS")
private WeekdayType repeatDays;//hear WeekdayType is Enum Class

而在我的服务类中,我使用这个TimetableVO.java bean类作为..

And in my service class i'm using this TimetableVO.java bean class as..

这是我的Service类:

This is my Service class:

public void createEvent(TimetableVO timetableVO) {
    WeekdayType weekday = null;
    for (String day : timetableVO.getTemp().split(",")) {
        weekday = WeekdayType.valueOf(day);
    }
    timetableVO.setRepeatDays(weekday);
    userDAO.createEvent(timetableVO);
}

我的DAO类插入了timetableVO对象。

And my DAO class i'm inserting timetableVO object..

public void createEvent(TimetableVO timetableVO) throws DataAccessException {
    entityManager.persist(timetableVO);
}

但是异常会来临。

Exception: Caused by: java.sql.BatchUpdateException: Data truncated for column 'REPEAT_DAYS' at row 1
    at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:2045)
    at coHibernate: insert into EC_TIMETABLE (CLASS_DURATION, COURSE_DURATION, COURSE_FEE, END_DATE, REPEAT_COUNT, REPEAT_DAYS, REPEAT_TYPE, SEARCH_KEY, START_DATE, S_ID) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
m.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1468)
    at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
    ... 65 more
Caused by: java.sql.SQLException: Data truncated for column 'REPEAT_DAYS' at row 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)

修改
这是我的WeekdayType枚举

This is my WeekdayType Enum

public enum WeekdayType {
    MONDAY(Calendar.MONDAY), TUESDAY(Calendar.TUESDAY), WEDNESDAY(
    Calendar.WEDNESDAY), THURSDAY(Calendar.THURSDAY), FRIDAY(
    Calendar.FRIDAY), SATURDAY(Calendar.SATURDAY), SUNDAY(
    Calendar.SUNDAY);

    private int day;

    private WeekdayType(int day) {
        this.day = day;
    }

    public int getDay() {
        return day;
    }
}


推荐答案

就像错误是由于列 REPEAT_DAYS 太小而无法保存您通过 WeekdayType Enum。因此,请重新检查您的联合数据库中该列的定义,并最终增加它的大小。

Looks like the error is due the fact that the column REPEAT_DAYS is too small to save the values you're passing via the WeekdayType Enum. So recheck the definition of that column in your underling database and eventually increase it's size.

您还缺少一个注释:

 @Column(name="REPEAT_DAYS", length="45")
 @Enumerated(EnumType.STRING)
 private WeekdayType repeatDays;

注释中的长度应该与您的数据库架构中的列的长度。

The length in the annotation should match the length of your column in your DB schema.

这篇关于如何在Mysql数据库中避免'数据被截断'使用java?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆