java - 当我将数据从 java 代码添加到 MYSQL Server 时,它不接受 Null 值,如何让它接受 Null 值?
问题描述
private void jButtonAddActionPerformed(java.awt.event.ActionEvent evt) {
String book1;
SimpleDateFormat Dformat = new SimpleDateFormat("yyyy-MM-dd");
try {
String sql = "INSERT INTO `book`(`Date`,`Book Title`, `Saled Book`) VALUES (?,?,?)";
con = DriverManager.getConnection("jdbc:mysql://localhost/bookstore", "root", "");
pst = con.prepareStatement(sql);
pst.setString(1, Dformat.format(jDateChooser1.getDate()));
pst.setString(2, jTextFieldBookTitle.getText());
book1 = "Saled Book";
if (jTextFieldSaledBook.getText().isEmpty()) {
pst.setNull(3, Types.INTEGER);
} else {
pst.setInt(3, Integer.parseInt(jTextFieldSaledBook.getText()));
}
pst.executeUpdate();
// To Refresh JTable
DefaultTableModel model = (DefaultTableModel) jTable1.getModel();
model.setRowCount(0);
showTableData();
clearFields();
JOptionPane.showMessageDialog(null, "Inserted Data Successfully");
}
catch(NumberFormatException nfe){
JOptionPane.showMessageDialog(null, "Invalid Number in Field ");
}
catch (HeadlessException | SQLException ex) {
JOptionPane.showMessageDialog(null, ex);
}
}
这是我的数据库部分
CREATE TABLE `book` (
`ID` int(15) AUTO INCREMENT,
`Date` date NOT NULL,
`Book Title` varchar(20) NOT NULL,
`Saled Book` int(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
当我运行并输入没有数字时,它说:
com.mysql.jdbc.exceptions.jdbc4.MysqlIntegrityConstraintViolationException:列'Saled Book'不能为空......
解决方案
据我了解的逻辑,这是可以进入“销售书”列的空值
if (jTextFieldSaledBook.getText().isEmpty()) {
pst.setNull(3, Types.INTEGER);
}
对我来说,它说:“如果我在 jTextFieldSaledBook 中没有找到任何内容,则将 'Saled Book' 值设置为 null”。这是在“非空”列中传递空值的地方。
如果我没记错的话,“已售书”栏就是用来存储您已售出的书的数量(它的类型是“int”)。因此,如果在 jTextFieldSaledBook 中找不到任何内容,则需要插入 0 而不是 null。
我假设用这样的东西改变 if-then 部分
if (jTextFieldSaledBook.getText().isEmpty()) {
pst.setInt(3, 0);
}
将解决您的问题。请注意,我不是 Java 开发人员,因此您可能需要修复我的代码版本以使其可运行
推荐阅读
- java - 设置按钮背景和颜色
- angular - Angular Material双重绑定ngModel不适用于输入文本区域和mat-slide
- r - 参数未在带有过滤器的函数中实现,但没有错误消息
- javascript - vue app中重新计算srcset,元素绑定
- ruby-on-rails - 手动更新密码 Rails Devise
- http - Mapbox 距离矩阵 API 返回全零
- javascript - 我正在尝试创建一个下拉菜单,该菜单存储餐厅菜单中的项目,使用 vanilla JavaScript 通过将对象数组传递给它
- ruby - 在 Ruby 和 RSpec 中使用 Logger
- c# - WPF 在禁用的 DataGrid 上显示空白行
- httprequest - 是否可以确定网站何时收到请求(客户端)?