MySQL ID übergben?

Dimadon

Aktives Mitglied
Hallo Leute,

habe eine kleine Pinnwand-Verwaltung zu bearbeiten. Nun habe ich ein Problem mit der Übergabe der User-ID in die Pinnwand-Tabelle meiner Datenbank. Ich hoffe mir kann hier einer weiterhelfen. Entweder ich stehe voll aufm Schlauch oder irgendwas stimmt nicht :)

Das Projekt wird später noch größer deshalb habe ich eine kleine Testklasse geschrieben, welches meine Daten in die Datenbank einpflegen soll.
Java:
public class TestUser extends SMObject {

	
	private static final long serialVersionUID = 1L;
	public static void main(String[] args){
	
		
		User u = new User();

		Pinnwand p = new Pinnwand();

		u.setVorname("'Test'");
		u.setNachname("'Tester'");
		u.setNickname("'Testa'");
		
	
		p.setSourceUserID(u.getId());
		PinnwandMapper.pinnwandMapper().insert(p);
		UserMapper.userMapper().insert(u);	

		System.out.println("User-ID:"+ u.getId()
							+ "\nVorname:"+ u.getVorname()
							+ "\nNachname:"+ u.getNachname()
							+ "\nNickname:"+ u.getNickname()
							+ "\nPinnwandnummer: "+p.getId());
							
						


}
			
	}

Der PinnwandMapper also die Insert Methode sieht wie folgt aus:
Java:
  public Pinnwand insert(Pinnwand p) {
    Connection con = LocalDBConnection.connection();

    try {
      Statement stmt = con.createStatement();

      
      ResultSet rs = stmt.executeQuery("SELECT MAX(id) AS maxid "
          + "FROM pinnwand ");

    
      if (rs.next()) {
       
        p.setId(rs.getInt("maxid") + 1);

        stmt = con.createStatement();

        
        stmt.executeUpdate("INSERT INTO pinnwand (id, sourceUser) " + "VALUES ("
            + p.getId()+ "," + p.getSourceUserID() + ")");
      }
    }
    catch (SQLException e2) {
      e2.printStackTrace();
    }

   
    return p;
  }

Die Pinnwand Klasse sieht wie folgt aus:
Java:
public class Pinnwand extends SMObject {

private static final long serialVersionUID = 1L;

  private int sourceUserID = 0;

 
  public int getSourceUserID() {
    return this.sourceUserID;
  }

 
  public void setSourceUserID(int sourceID) {
    this.sourceUserID = sourceID;
  }

  public String toString() {
    return super.toString() + " inhaber, User-ID: #" + this.sourceUserID;
  }


  public boolean equals(Object o) {
   
    if (o != null && o instanceof Pinnwand) {
      Pinnwand c = (Pinnwand) o;
      try {
        return super.equals(c);
      }
      catch (IllegalArgumentException e) {
        return false;
      }
    }
    return false;
  }

}

Ich hoffe es kann mir jemand helfen und erkennt welchen Fehler ich gemacht habe. Danke schon einmal im Voraus.

VG
 
Zuletzt bearbeitet:

Dimadon

Aktives Mitglied
Ok....das größte Problem habe ich erledigt. Jetzt habe ich aber noch ein Problem: Beim Insert eines neuen Datensatzes wird die ID des Nutzers nicht eingetragen. Vielmehr bekomme ich den Fehler:
SQL:
Cannot add or update a child row: a foreign key constraint fails (`socialmediapinnwand`.`pinnwand`, CONSTRAINT `pinnwand_ibfk_1` FOREIGN KEY (`sourceUser`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)

Kann mir hier eventuell jemand weiterhelfen? Hab schon einiges probiert, aber komme irgendwie nicht auf eine gutes Ergebnis.

Die Insert Methode sieht so aus:
Java:
public Pinnwand insert(Pinnwand p) {
    Connection con = LocalDBConnection.connection();

    try {
      Statement stmt = con.createStatement();

      
      ResultSet rs = stmt.executeQuery("SELECT MAX(id) AS maxid "
          + "FROM pinnwand ");

    
      if (rs.next()) {
       
        p.setId(rs.getInt("maxid") + 1);

        stmt = con.createStatement();

        
        stmt.executeUpdate("INSERT INTO pinnwand (id, sourceUser) " + "VALUES ("
            + p.getId()+ "," + p.getSourceUserID() + ")");
      }
    }
    catch (SQLException e2) {
      e2.printStackTrace();
    }

   
    return p;
  }

Die Testklasse bleibt:
Java:
public static void main(String[] args){
	
		
		User u = new User();

		Pinnwand p = new Pinnwand();

		u.setVorname("'Test'");
		u.setNachname("Tester'");
		u.setNickname("'xxxx'");
		
		p.setSourceUserID(u.getId());
		PinnwandMapper.pinnwandMapper().insert(p);
		UserMapper.userMapper().insert(u);	

		System.out.println("User-ID:"+ u.getId()
							+ "\nVorname:"+ u.getVorname()
							+ "\nNachname:"+ u.getNachname()
							+ "\nNickname:"+ u.getNickname()
							+ "\nPinnwandnummer: "+p.getId());
							
						


}

Wie zu sehen ist möchte ich beim anlegen eines neuen Users die verwendete ID in sourceUser speichern. Fremschlüssel ist gesetzt aber irgendwie klappt das nicht :(
 

Neue Themen


Oben