【问题标题】:Data truncation: Data too long for column 'CompanyName' at row 1数据截断:第 1 行的“公司名称”列的数据太长
【发布时间】:2020-05-14 21:33:14
【问题描述】:

我遇到了一个我无法解决的问题。这个“引起:db.DbException:数据截断:第 1 行的 'CompanyName' 列的数据太长”一直出现在我面前。我将发布代码以便更好地理解。

public class CompanyFormController implements Initializable {

        private Company entity;
        private CompanyService service;

        @FXML private TextField txtCompanyName;

        @FXML private TextField txtCeoName;

        @FXML private TextField txtMobile;

        @FXML private TextField txtCountryMobileCode;

        @FXML private TextField txtEmail;

        @FXML private Label labelEmailError;

        @FXML private ComboBox<String> comboboxCountry;

        @FXML private DatePicker datepickerFoundationDate;

        @FXML private TextField txtWebsite;

        @FXML private ComboBox<String> comboboxIndustry;

        @FXML private ChoiceBox<String> choiceboxGrossSales;

        @FXML private Button btUploadCompanyName;

        @FXML private Button btSave;

        @FXML
        public void onBtSaveAction() {

            CompanyDaoJDBC jdbcDao = new CompanyDaoJDBC(DB.getConnection());
            jdbcDao.insert(new Company(1, String.valueOf(txtCompanyName), String.valueOf(txtCeoName), String.valueOf(txtCountryMobileCode) + String.valueOf(txtMobile), String.valueOf(txtEmail), String.valueOf(comboboxCountry), String.valueOf(datepickerFoundationDate), String.valueOf(txtWebsite), String.valueOf(comboboxIndustry), String.valueOf(choiceboxGrossSales)));
        }

这里的问题是当我像上面这样的代码出现错误但是当将“”放在 String.valueOf 中的值上时它工作正常并且我的数据库保存了这些值。

这就是方法插入的地方:

@Override
public void insert(Company obj) {
    PreparedStatement st = null;
    try {
        st = conn.prepareStatement(
            "INSERT INTO company " +
            "(Id, CompanyName, CeoName, PhoneNumber, Email, Country, FoundationDate, Website, Industry, GrossSales) " +
            "VALUES " +
            "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", 
            Statement.RETURN_GENERATED_KEYS);

        st.setInt(1, obj.getId());
        st.setString(2, obj.getCompanyName());
        st.setString(3, obj.getCeoName());
        st.setString(4, obj.getPhoneNumber());
        st.setString(5, obj.getEmail());
        st.setString(6, obj.getCountry());
        st.setString(7, obj.getFoundationDate());
        st.setString(8, obj.getWebsite());
        st.setString(9, obj.getIndustry());
        st.setString(10, obj.getGrossSales());

        int rowsAffected = st.executeUpdate();

        if (rowsAffected > 0) {
            ResultSet rs = st.getGeneratedKeys();
            if (rs.next()) {
                int id = rs.getInt(1);
                obj.setId(id);
            }
        }
        else {
            throw new DbException("Unexpected error! No rows affected!");
        }
    }
    catch (SQLException e) {
        throw new DbException(e.getMessage());
    } 
    finally {
        DB.closeStatement(st);
    }
}

我会让你参加我的公司班:

public class Company implements Serializable {

private static final long serialVersionUID = 1L;

private Integer id;
private String companyName;
private String ceoName;
private String phoneNumber;
private String email;
private String country;
private String foundationDate;
private String website;
private String industry;
private String grossSales;

public Company() {
}

public Company(Integer id, String companyName, String ceoName, String phoneNumber, String email, String country,
        String foundationDate, String website, String industry, String grossSales) {
    this.id = id;
    this.companyName = companyName;
    this.ceoName = ceoName;
    this.phoneNumber = phoneNumber;
    this.email = email;
    this.country = country;
    this.foundationDate = foundationDate;
    this.website = website;
    this.industry = industry;
    this.grossSales = grossSales;
}

这是 MySQL 表信息:

表:公司

列:

Id int AI PK

公司名称 varchar(60)

CeoName varchar(60)

电话号码 varchar(60)

电子邮件 varchar(100)

国家 varchar(60)

FoundationDate varchar(30)

网站 varchar(80)

行业 varchar(40)

GrossSales varchar(120)

【问题讨论】:

    标签: java mysql eclipse


    【解决方案1】:

    您正在尝试设置大于允许的数据。尝试使用其他文本数据类型,或增加允许的大小。

    【讨论】:

    • 尝试使用 varchar(65535) 看看是否有效。如果是这样,那么大小就是问题所在,这就是异常所说明的。
    【解决方案2】:

    我发现我做错了什么,我没有将 TextField“转换”为字符串。

    解决办法:

    jdbcDao.insert(new Company(1, txtCompanyName.getText(), txtCeoName.getText(), txtCountryMobileCode.getText() + txtMobile.getText(), txtEmail.getText(),  comboboxCountry.getValue(), datepickerFoundationDate.getValue().toString(), txtWebsite.getText(), comboboxIndustry.getValue(), choiceboxGrossSales.getValue()));
    

    您知道如何自动输入我的 id(数字 '1')吗? 因为我不想在该字段上输入数字。在 MYSQL 中,id 字段是 Auto Increment。

    【讨论】:

      猜你喜欢
      • 2014-09-28
      • 2014-02-26
      • 2022-11-26
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 2021-09-02
      相关资源
      最近更新 更多