# doppelte Einträge in DB



## RW_NORD (23. Jan 2013)

Hallo,

Ich stehe vor einem Problem. Und zwar möchte ich bevor ich einen "insert"-Befehl ausführe prüfen, ob der DS (bzw. email und passwort) einer Person in der Datenbank schon vergeben ist. Benutze eine phpMyAdmin SQL-Datenbank. Die Spalten "email" und "passwort" habe ich in der DB bereits als Unique markiert.

Hier ein Ausschnitt der Mapperklasse die den insert-Befehel ausführt.


```
/**
     * Dient dazu, ein <code>Person</code>-Objekt in die Datenbank zu speichern
     * @param pe das zu speichernde Person-Objekt
     * @return das übergebene Person-Objekt
     */

    public Person createPerson(Person pe) {
        Connection con = DBConnection.connection();

        try {
            Statement stmt = con.createStatement();

            /*
             * Hier wird überprüft welche person_id bisher die höhste ist.
             */
            ResultSet rs = stmt.executeQuery(
                    "SELECT MAX(person_id) AS maxid " +
                    "FROM person");


            if (rs.next()) {
                try {
                    /* Hier wird die bisher höhste vorhandene person_id um +1 erhöht.
                     */
                    pe.set_person_id(rs.getInt("maxid") + 1);

                    stmt = con.createStatement();

                    /* Die tatsächliche Einfügeoperation mit den übergebenden Attributen.
                     */

                    stmt.executeUpdate("INSERT INTO person (person_id, vorname, nachname, raum, email, telefon, passwort) VALUES (" +
                            pe.get_person_id() + ",'" +
                            pe.get_vorname() + "','" +
                            pe.get_nachname()+ "','" +
                            pe.get_raum()+ "','" +
                            pe.get_email()+ "','" +
                            pe.get_telefon()+ "','" +
                            pe.get_passwort() + "')");


                } catch (RemoteException ex) {
                    ex.printStackTrace();
                }
            }
        } catch (SQLException e2) {
            e2.printStackTrace();
        }
        /* Rückgabe des angelegten Objekts pe von Typ Person.
         */
        return pe;
    }
```

Ich weiß nun nicht wo ich genau abfragen muss, ob die email oder das passwort bereits vergeben ist. Vielleicht kann mir da jemand weiterhelfen. Danke

Grüße NORD


----------



## KSG9|sebastian (23. Jan 2013)

Das ein Passwort doppelt vorkommen darf ist doch in Ordnung, warum willst du das verbieten?

Eine Möglichkeit für dein Problem wäre (hast du glaub schon?) einen UniqueIndex auf das Mail-Feld legen. Wenn du dann versuchst einen doppelten Eintrag einzufügen gibts ne Exception.

Alternativ kannst du vor dem Insert einen Select machen WHERE email=? (setParameter(1, "a mail");.

Du solltest die ID-Spalten nicht manuell erhöhen, dafür gibt es die AUTO_INCREMENT-Option für den Primärschlüssel. Manuel erhöhen bringt das Problem mit sich, dass es bei gleichzeitigen/zeitnah aufeinanderfolgenden Zugriffen kaputt geht.


----------



## SlaterB (23. Jan 2013)

'Überprüfen Ob DS bereits vorhanden ist!'
was soll DS dabei eigentlich heißen, Datensatz?
kann man mit diesem Titel wirklich direkt auf ein Datenbank-Thema schließen, und ist das was für Java-Basics-Bereich?

umbenannt, verschoben..


----------

