2011-12-09 14 views
0

[Add]ボタンをクリックすると、そのインスタンスの中にデータベースと対話するQUERYがあり、取得した入力を追加する別のインスタンスが作成されますJTextFieldから、と私はそれが私にここにクエリが動作しているActioneventが機能していません

m.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException 

を与え続けている別の問題を抱えていることは、私のアクションイベントコードである

private class AddHandler implements ActionListener { 
     public void actionPerformed(ActionEvent event) { 

       Personal personal = new Personal(firstTxt.getText(),miTxt.getText(), 
            lastTxt.getText(),dob.getText(),maritalTxt.getText(),beneTxt.getText()); 
       Contact contact = new Contact(telTxt.getText(),addTxt.getText(), 
            mobTxt.getText(),emailTxt.getText()); 
       Employee employee = new Employee(posTxt.getText(),payTTxt.getText(),payRTxt.getText(),hireTxt.getText()); 

       Finance finance = new Finance(); 

       finance.addEmployee(personal,contact,employee); 


     } 
    } 

マイaddEmployeeコード

ここ

エラー

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`finalpayroll`.`personal_info`, CONSTRAINT `personal_info_ibfk_1` FOREIGN KEY (`idpersonal_info`) REFERENCES `users` (`idusers`) ON DELETE CASCADE ON UPDATE CASCADE) 

のリストは、私が外国人を持っている理由あなたたちは不思議に思っているならば、私はそれに外部キーを追加したことで、あなたたちはなぜ不思議に思っているならば、それは、外部キーがidUsersありますです私は行を削除すると、他のテーブルの他のすべての行が削除されますが、それは動作しないように、私は外部キーを持っているので、外部キーがあります。

+0

はあなたがそこに短い – Jomoos

+0

に長い行を編集することができ役に立てば幸い、私はそれを編集しました。私の質問を再確認してください – user962206

答えて

1

次の表は、あなたの質問から推測できます。私が正しくあなたのテーブル構造を理解していれば、それは次のような結論に私を入れて、

The values in one row of the referencing columns 
must occur in a single row in the referenced table. 

:ウィキペディアから

idusers   - primary key 
idpersonal_info - foreign key referencing idusers, 
        also, it is set to ON DELETE CASCADE, ON UPDATE CASCADE 

        You had set it as primary key with AUTO_INCREMENT also. 

Foreign Key上:

users   -- idusers, other fields 
personal_info -- idpersonal_info, First_Name, Middle_Initial, Last_Name, 
        Date_Of_Birth, Marital_Status, Beneficiaries 

は、私は次のような関係を前提としています。

personal_infoテーブルに新しいレコードを挿入していますが、idpersonal_infoの値はプライマリで、auto_incrementなので、値を省略します。行を挿入する前に、MySQLは設定した外部制約をチェックします。そこで、idpersonal_infoの値がidusersフィールドのusersテーブルに存在するかどうかを確認します。 idpersonal_infoの値を指定しないため、MySQLはNULLまたは自動増分値idpersonal_infoのいずれかを取ることができます。これはMySQLがとるものですが、わかりません。 NULLが必要な場合は、usersテーブルには存在しないため、外部キー制約の違反になります。 auto_incremented値をとると、usersテーブルに存在しない可能性があります。存在しない場合は、外部キー制約に違反します。

ここで私が考えることができるのは、クエリでもidpersonal_infoの値を指定する必要があるということです。 usersテーブルにも存在することを確認する必要があります。

:)

+0

助けてくれました!非常に遅れたフィードバックと答えをお寄せいただきありがとうございます。しかし、これは本当に助けになった! – user962206

+1

@ user962206ようこそ! – Jomoos

関連する問題