2017-02-06 36 views
0

私は、JavaとMySQLを使用して従業員給与管理システムを開発しています。レコードを追加しようとすると、このエラーが発生します。java.sql.SQLException:フィールドIDにデフォルト値がありません

私のコードはここにある:

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); 
     } 
    } 
}           
+0

エラーを投稿してください:) – RobAu

+0

例外メッセージではかなり明確で、 java。テーブルキーとしてIDを宣言したと思います。挿入時にIDの新しい値を生成するようにテーブルを構成します。 https://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html – RubioRic

+0

感謝します。私の問題は解決しました –

答えて

1

あなたのテーブルには、デフォルト値なし、-NOT NULL列id(おそらく主キー)を持っています。つまり、で、クエリに値を割り当てる必要があります。

これは、ID列(AUTO_INCREMENT)であることを意味していたかもしれませんが、1つに設定するのは忘れてしまいました。

+0

感謝します。私の問題は解決しました –

0

このエラーの原因は、テーブルidNULLになることができず、クエリの値を渡していないということです。

クエリで列idに値を渡すか、それがprimary keyであれば、私はあなたがnot nullまたはuniqueまたはprimarykeyとして設定かもしれない名「ID」の列を持っていると思うauto increment

+0

どうすればいいですか?クエリーを通じてIDの値を渡す –

+0

感謝します。私の問題は解決しました –

0

に設定します。どちらか

この列に値を指定しないと、JDBC driverがエラーになります。

この問題を解決するには、SQLクエリで列を追加する値を明示的に指定するか、列の種類が数値の場合はauto incrementに設定します。

実行しようとしているクエリが非選択クエリであるため、ResulSetが返されません。したがって、文rs.close()は必須ではありません。

また、The try-with-resources Statementを使用することをお勧めします。これを使用すると、コード内の次の文を避けることができます。

try{ 
    rs.close(); 
     pst.close(); 
} catch(Exception e) { 
    JOptionPane.showMessageDialog(null,e); } } 
} 
+0

感謝します。私の問題は解決しました –

+0

私はどのように自動増分にIDを設定できますか? –

+0

@Zunairahbukhariあなたはstaff_incrementテーブルのidカラムを作成するためにこのクエリを使用することができます "ALTER TABLE Staff_information MODIFY COLUMN id INT auto_increment" –

0

おそらくあなたのテーブルStaff_informationは必須でID列、(NULL可能ではない)を有し、値が挿入クエリで供給されていません。

テーブルの定義を確認してください。 ID列がプライマリキーの場合、クエリ内の値を渡すか、列を自動インクリメントに定義する必要があります

+0

Thanksss lot ..私の問題は解決されました –

関連する問題