2017-12-07 4 views
0

は、だから、私は著者、論文、査読のためにテーブルを作成していた会議など不要な外部キー制約の失敗

レビューアがプログラム委員会の電子メールを参照する電子メールを提供ためのモックのデータベースを持っています。これが私が適所に置く重要な制約です。次に、PCテーブルにデータを追加してから、レビューアテーブルにデータを追加しようとします。これは私が取得エラーです:ここでは

Exception encountered com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`sampledb`.`review`, CONSTRAINT `review_ibfk_2` FOREIGN KEY (`email`) REFERENCES `pcmember` (`email`)) 

は、他の機能です:

public int loadPCMember(){ 
    String tablename = "pcmember"; 
    String create = "CREATE TABLE IF NOT EXISTS pcmember(email VARCHAR(100), name VARCHAR(50), PRIMARY KEY (email));"; 
    makeTable(create); 
    System.out.println("made table pcmember"); 
    //CSV Reader 
    String[][] content = CSVReader(tablename,2); 

    for(int i = 0 ; i < content.length; i++){ 
     try{ 
      String query = "INSERT INTO pcmember(email,name) VALUES (?,?)"; 
      PreparedStatement ps2 = net.prepareStatement(query); 
      ps2.setString(1, content[i][0]); 
      ps2.setString(2, content[i][1]); 
      ps2.executeUpdate(); 
      System.out.println((i+1)+ " done"); 
     // Throw exception 
     }catch (SQLException e){System.out.println("Exception encountered");return 0;} 
    } 
    System.out.println("PC Member Done"); 
    return 1; 
} 
//Load next 
public int loadReview(){ 
    String tablename = "review"; 
    String create = "CREATE TABLE IF NOT EXISTS review(reportid INTEGER, sdate DATE, comment VARCHAR(250), recommendation VARCHAR(6), paperid INTEGER NOT NULL, email VARCHAR(100) NOT NULL, PRIMARY KEY(reportid), FOREIGN KEY (paperid) REFERENCES paper(paperid), FOREIGN KEY(email) REFERENCES pcmember(email));"; 
    makeTable(create); 
    System.out.println("made table review"); 
    //CSV Reader 
    String[][] content = CSVReader(tablename,6); 

    for(int i = 0 ; i < content.length; i++){ 
     System.out.println("" + content[i][0] + "\t" +content[i][1] + "\t" + content[i][2] + "\t" +content[i][3] + "\t" +content[i][4] + "\t" +content[i][5]); 
     try{ 
      //SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy"); 
      //java.util.Date date = sdf.parse(content[i][1]); 
      //System.out.println(""+date); 
      //Date newDate = new Date(date.getTime()); 
      //System.out.println(""+newDate); 
      String query = "INSERT INTO review(reportid,sdate,comment,recommendation,paperid,email) VALUES (?,?,?,?,?,?)"; 
      PreparedStatement ps2 = net.prepareStatement(query); 
      ps2.setInt(1, Integer.parseInt(content[i][0])); 
      ps2.setDate(2, java.sql.Date.valueOf(content[i][1])); 
      ps2.setString(3, content[i][2]); 
      ps2.setString(4, content[i][3]); 
      ps2.setInt(5, Integer.parseInt(content[i][4])); 
      ps2.setString(6, content[i][5]); 
      ps2.executeUpdate(); 
      System.out.println((i+1)+ " done"); 
     // Throw exception 
     }catch (SQLException e){System.out.println("Exception encountered "+ e);return 0; 
     }//catch (ParseException e){System.out.println("Parse Exception encountered "+e);} 

    } 
    System.out.println("Review Done"); 
    return 1; 
} 

私はキー制約のまともな理解を持っていると私はかなりCSVファイルが同じを持つ上のスポットです正確な電子メール、このエラーの原因は何ですか?

答えて

0

私はSQLの男であり、Javaの男ではありません。私がそれのために理にかなっていないことを尋ねるか、示唆したら、あなたはその理由を知っています。明らかにするには、そのエラーメッセージとsqlに基づいて、pcmemberテーブルに存在しない電子メールアドレスを持つレビューテーブルにレコードを挿入しようとしているように見えます。レビュー表。これはあなたが使っているCVSのデータ問題のようです。ただし、pcmember INSERTが正常に完了する前にレビューテーブルに行をINSERTしようとしている可能性があると、あなたはデータファイルに自信があると述べたので、

+0

最初の外部キー参照がどのように問題なく通過していますか?私はこれらの関数のそれぞれを1つずつ呼び出すので、次の関数が呼び出される前に正常に完了しなければならない(SHOULD)。 – Samuel

+0

"最初の外部キー参照"とは、あなたの挿入物中のペーパーテーブルへの参照を参照することを意味しますか? –