当我将数据从 java 代码添加到 MYSQL Server 时,它不接受 Null 值,如何让它接受 Null 值?

Posted

技术标签:

【中文标题】当我将数据从 java 代码添加到 MYSQL Server 时,它不接受 Null 值,如何让它接受 Null 值?【英文标题】:When I Add my data from java code to MYSQL Server its not Accept Null Values, how to Make it to accept Null Values? 【发布时间】:2021-03-10 09:32:31 【问题描述】:
 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:Column 'Sale Book' 不能为空......

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

对不起#ekochergin,它也是我的 Xampp 表行列中的 ID INT(15) AUTO_INCREMENT 已编辑。但这对我不起作用。感谢您的建议,请查看我的代码 谢谢,@ekochergin,你回答了我的问题。上帝保佑你

以上是关于当我将数据从 java 代码添加到 MYSQL Server 时,它不接受 Null 值,如何让它接受 Null 值?的主要内容,如果未能解决你的问题,请参考以下文章

来自 php mysql 的 Highcharts 钻取 json

“Activity 已经泄露了原本添加在这里的窗口”

当我将新单元格添加到集合视图时,我不断收到布局错误

当我将核心数据添加到表视图时,我的应用程序崩溃了

JSP页面将数据从mysql导出到excel的Java代码

如何在Mysql大表中将数据从表移动到另一个表