Java com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:列“hourId”不能为null

Java com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:列“hourId”不能为null,java,mysql,jdbc,Java,Mysql,Jdbc,我的项目是教师分配。当我尝试插入数据时,它显示以下异常 "com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'hourId' cannot be null" 有谁能帮我克服这个问题吗? 请提供示例代码以避免此异常 "com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Colum

我的项目是教师分配。当我尝试插入数据时,它显示以下异常

"com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 
Column 'hourId' cannot be null"
有谁能帮我克服这个问题吗? 请提供示例代码以避免此异常

"com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 
Column 'hourId' cannot be null"
我的编码是

<%
    Connection con = null;
    String StaffName = request.getParameter("StaffName");
   // String subcode = request.getParameter("subcode");
    String hourId = request.getParameter("hourId");
    String daysId = request.getParameter("daysId");
    String date = request.getParameter("date");


  //String queryText = "insert into tblstaffallocation (StaffName, subcode,hourId, daysId, date) values('"+StaffName+"','"+subcode+"','+hourId+','+daysId+','+date+')";

    try {
          Class.forName("com.mysql.jdbc.Driver");
          con = DriverManager.getConnection("jdbc:mysql://localhost:3306/StaffAllocation","root","success");

       // PreparedStatement stat = con.PrepareStatement();
        String updateString ="INSERT INTO tblstaffallocation (StaffName,hourId,daysId,date) VALUES (?,?,?,?)";

        PreparedStatement preparedStatement = con.prepareStatement(updateString);


        preparedStatement.setString(1, StaffName);
        preparedStatement.setString(2, hourId);
        preparedStatement.setString(3, daysId);
        preparedStatement.setString(4, date);
        preparedStatement.executeUpdate();
        //int rst = stat.executeUpdate("insert into tblstaffallocation ('StaffName','hourId', 'daysId', 'date') values('"+StaffName+"','"+hourId+"','"+daysId+"','"+date+"')");

        %>
        <table cellpadding="4" border="1" cellspacing="4" align="center">
        <th>StaffName</th><th>hourId</th><th>daysId</th><th>date</th>
        <%
        Statement st=con.createStatement();
        ResultSet rs=st.executeQuery("select * from tblstaffallocation");
        while(rs.next()){
            rs.getString(1);
            rs.getString(2);
            rs.getString(3);
            rs.getString(4);

        }
        } catch (Exception e) { 
        out.print(e);

    }
错误表明hourId有一个空值,因此必须避免它。例如,您可以使用:

String hourId = request.getParameter("hourId");
if (hourId==null)
    hourId="";
只要列接受空字符串。如果不是,则必须更改表定义以允许空值:

 ALTER TABLE tblstaffallocation
   MODIFY COLUMN hourId INTEGER NULL;
错误表明hourId有一个空值,因此必须避免它。例如,您可以使用:

String hourId = request.getParameter("hourId");
if (hourId==null)
    hourId="";
只要列接受空字符串。如果不是,则必须更改表定义以允许空值:

 ALTER TABLE tblstaffallocation
   MODIFY COLUMN hourId INTEGER NULL;

每个表都有主键,并且主键的键属性不允许空值,这是一种很好的做法。。。 ORM/Hibernate严格遵循这个原则,其中每个实体/持久bean都应该有主键。。您的问题的答案是,您正在尝试向主\不可为空的列插入空值。。。。所以你得到了一个例外。。。下面的代码不是好的实践。如果您有意使列可为null,那么显然没有必要尝试插入null/empty值。。最好在实际开始实现应用程序之前设计数据模型

if (hourId==null)
    hourId="";
希望这将是有益的


干杯

每个表都有主键,并且主键的键属性不允许空值,这是一种很好的做法。。。 ORM/Hibernate严格遵循这个原则,其中每个实体/持久bean都应该有主键。。您的问题的答案是,您正在尝试向主\不可为空的列插入空值。。。。所以你得到了一个例外。。。下面的代码不是好的实践。如果您有意使列可为null,那么显然没有必要尝试插入null/empty值。。最好在实际开始实现应用程序之前设计数据模型

if (hourId==null)
    hourId="";
希望这将是有益的


干杯

让我们检查一下hibernate的场景。 解决方案:

1.使用表检查实体映射。 2.检查主键和外键的关系。 3.主键在表中不能为null,在其他表中可以为null


让我们检查一下hibernate的场景。 解决方案:

1.使用表检查实体映射。 2.检查主键和外键的关系。 3.主键在表中不能为null,在其他表中可以为null


创建表时,列hourId被设置为NOTNULL,并且您正尝试使用null值进行更新。
您可以更改表格以接受hourId为null,或者为hourId设置一些默认值

列hourId在创建表格时设置为not null,并且您尝试使用null值进行更新。
您可以更改表以接受hourId为null,或者为hourId设置一些默认值

将column_name更改为null我尝试过,当我向表中插入数据时,编码工作正常。但当我从tblstaffallocation中给出select*时。除staffname之外输入的所有值都存储为空值。@user2951465 hourid列不接受空值。请确保request.getParameterhourId;不回来null@lucas我不明白你的意思,我应该提供什么名字?请多点specific@user2951465对不起,我的意思是hourId:将column_name更改为Nullable我尝试过,当我将数据插入表中时,编码工作正常。但当我从tblstaffallocation中给出select*时。除staffname之外输入的所有值都存储为空值。@user2951465 hourid列不接受空值。请确保request.getParameterhourId;不回来null@lucas我不明白你的意思,我应该提供什么名字?请多点specific@user2951465对不起,我的意思是hourId:我尝试了您所说的,它显示java.sql.SQLException:不正确的整数值:对于第1行exceptionColumn的“hourId”列,它是一个int,因此它需要一个整数作为输入。如果您将其作为参数提供,它将返回一个SQL异常。那么我必须用什么替换它呢?请稍感困惑您是否希望在hourId中允许空值?如果是,请尝试给定的SQL。如果不是,则当请求参数为null时,必须决定希望在表字段中显示什么。这将取决于你的计划。。。我们不能决定。用0表示无值字段是很常见的,但这取决于您使用它的目的。我尝试了您所说的,它显示了java.sql.SQLException:不正确的整数值:对于第1行的列“hourId”,exceptionColumn是一个int,因此它需要一个整数作为输入。如果您将其作为参数提供,它将返回一个SQL异常。那么我必须用什么替换它呢?请稍感困惑您是否希望在hourId中允许空值?如果是,请尝试给定的SQL。如果不是,则当请求参数为null时,必须决定希望在表字段中显示什么。这将取决于你的计划。。。我们不能决定。用0表示无值字段是很常见的,但这取决于您使用的是什么
但如果我想保留数据库中以前的值而不去碰它。我该怎么做呢?如果您的上一个值为null,并且给出了SQLException,那么您必须插入一个零,修改表的列以接受字符串,或者将列默认值设置为0。但是,如果我想在数据库中保留上一个值而不触碰它。我该怎么做?如果您的上一个值为空,则必须插入零,修改表的列以接受字符串,或者将列默认值设置为0。