首页 > 解决方案 > 当我将数据从 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'不能为空......

标签: javamysqlsql

解决方案


据我了解的逻辑,这是可以进入“销售书”列的空值

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 开发人员,因此您可能需要修复我的代码版本以使其可运行


推荐阅读