【发布时间】: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)
【问题讨论】: