![](/img/trans.png)
[英]Java Entity java.sql.SQLException: Field 'id' doesn't have a default value
[英]java.sql.SQLException:field id does not have a default value
我正在使用 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);
}
}
}
您的表还具有一个非空的列id
(可能是主键),没有默认值。 这意味着您必须在查询中分配一个值。
这也可能意味着您打算将其作为标识列( AUTO_INCREMENT
),但是忘记将其设置为1。
发生此错误的唯一原因可能是您在表Staff_information
中具有不能为NULL
的列id
,并且您没有在查询中为其传递值。
在您的查询中传递列id
的值,或者如果它是primary key
,请将其设置为auto increment
我认为您有一列名为“ id”的列,该列可能配置not null
或unique
或primarykey
。
由于您没有为该列提供值,因此JDBC driver
将引发错误。
要解决此问题,您可以在SQL查询中显式提供添加列的值,或者,如果列类型为number,则可以将该列配置为auto increment
。
除此之外,由于您要执行的查询是非选择查询,因此不会返回ResulSet
。 因此,不需要rs.close()
语句。
我也建议您使用try-with-resources语句 。 使用此方法,可以避免代码中出现以下语句。
try{
rs.close();
pst.close();
} catch(Exception e) {
JOptionPane.showMessageDialog(null,e); } }
}
您的表Staff_information可能有一个ID列,该列是必需的(不能为null),并且在插入查询中未提供该值。
请检查您的表定义。 如果ID列是主键,则需要在查询中传递值或将列定义为自动递增
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.