簡體   English   中英

java.sql.SQLException:field id 沒有默認值

[英]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 nulluniqueprimarykey

由於您沒有為該列提供值,因此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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM