java.sql.SQLException:field id没有默认值

时间:2017-02-06 07:46:24

标签: java mysql jdbc

我正在使用Java和MySQL开发员工薪资管理系统。当我尝试添加记录时,就会出现此错误。

我的代码在这里:

    try { 
         String sql ="insert into Staff_information " 
            + "(first_name,surname,Dob,Email," 
            + "Telephone,Address,Department," 
            + "Image,Salary,Gender,Address2," 
            + "Post_code, Designation,Status,job_title,Apartment,Date_hired)          values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) ";
         pst=conn.prepareStatement(sql); 
         pst.setString(1,txt_firstname.getText());
         pst.setString(2,txt_surname.getText()); 
         pst.setString(3,txt_dob.getText()); 
         pst.setString(4,txt_email.getText());
         pst.setString(5,txt_tel.getText()); 
         pst.setString(6,txt_address.getText()); 
         pst.setString(7,txt_dep.getText());
         pst.setBytes(8,person_image);
         pst.setString(9,txt_salary.getText()); 
         pst.setString(10,gender);
         pst.setString(11,txt_add2.getText());  
         pst.setString(12,txt_pc.getText());
         pst.setString(13,txt_design.getText()); 
         pst.setString(14,txt_status.getText()); 
         pst.setString(15,txt_job.getText());
         pst.setString(16,txt_apt.getText());
         pst.setString(17,txt_doj.getText());
         pst.execute();
         JOptionPane.showMessageDialog(null,"Data is saved successfully");
    } catch (Exception e) { 
        JOptionPane.showMessageDialog(null,e);
    } finally{
        try {
           rs.close();
           pst.close(); 
        } catch(Exception e) { 
           JOptionPane.showMessageDialog(null,e);
        } 
    }
}                                        

4 个答案:

答案 0 :(得分:1)

您的表还有一个非空列id(可能是主键),没有默认值。这意味着您必须在查询中分配值。

这也可能意味着您认为它是一个标识列(AUTO_INCREMENT),但忘记将其设置为一个。

答案 1 :(得分:0)

出现此错误的唯一原因可能是您的表id中的列Staff_information不能为NULL且您未在其中传递值id查询。

在您的查询中为列primary key传递值,或者如果它是auto increment,请将其设置为{{1}}

答案 2 :(得分:0)

我认为您有一个名为“id”的列,可能配置为^not nullunique

由于您没有为该列提供价值,因此primarykey会抛出错误。

要解决此问题,您可以显式提供在SQL查询中添加列的值,否则如果列类型为数字,则可以将该列配置为JDBC driver

除此之外,您尝试执行的查询是非选择查询,它不会返回auto increment。因此,声明ResulSet不是必需的。

我还建议您使用The try-with-resources Statement。使用它可以避免代码中的以下语句。

rs.close()

答案 3 :(得分:0)

您的表Staff_information可能有一个ID列,这是必需的(不可为空),并且插入查询中不提供该值。

请检查您的表格定义。如果ID列是主键,则需要在查询中传递值或将列定义为自动增量