# SQL Exception auf Unique überprüfen



## CroweHammer (3. Mai 2010)

Sers Leute,

Ich einer Tabelle meiner Datenbank ist eine Spalte als username definiert, welche ich unique gesetzt habe.
Wird jetzt ein username eingegeben mit einem Namen, der schon in der Datenbank steht wird logischerweise eine SQLException geworfen.
Hab ich eine Möglichkeit abzufragen, ob die SQLException durch die Ursache Unique entstanden ist, um den User danach hinweisen zu können, dass der Name schon vorhanden ist?

Google brachte mir nicht die gewünschten Ergebnisse.
Greetz CroweHammer


----------



## SlaterB (3. Mai 2010)

die SQLException lesen?


----------



## Ebenius (3. Mai 2010)

Wenn Du mit Java 6 und damit mit JDBC 4.0 arbeitest, dann bekommst Du bei allen Constraint-Violations eine SQLIntegrityConstraintViolationException. Genauer kann man das aber nicht so einfach einschränken.

HTH, Ebenius


----------



## CroweHammer (3. Mai 2010)

```
try {
            con.createStatement().executeUpdate(insert_user);
} catch(SQLException sqle) {
            JOptionPane.showMessageDialog(null, "Adding of the user failed");
}
```

hier mal ein simples Beispiel auf die Schnelle. 
Wenn insert_user fehlschlägt, wegen der Ursache "Unique", will ich eine extra Meldung ausgeben.

edit: sry du warst schneller. okay ich werd mir das mal durchlesen. 
D.h. die Exception wird nur geworfen, wenn es einen der drei Key-Fehler betrifft? unique, primary oder foreign?


----------



## Ebenius (3. Mai 2010)

Wie gesagt, so genau kannst Du's nicht einschränken. Aber zumindest soweit: 
	
	
	
	





```
try {
            con.createStatement().executeUpdate(insert_user);
} catch(SQLIntegrityConstraintViolationException sqle) {
            JOptionPane.showMessageDialog(null, "Constraint violation while adding new user");
} catch(SQLException sqle) {
            JOptionPane.showMessageDialog(null, "Adding of the user failed");
}
```
Ebenius


----------



## CroweHammer (3. Mai 2010)

```
try {
        con.createStatement().executeUpdate(insert_user);
} catch(SQLIntegrityConstraintViolationException sicve) {
        if(sicve.getErrorCode() == 1062) {
                JOptionPane.showMessageDialog(null, "The name already exists!" +
                                                    " Please, Choose another.");
      } else {
                JOptionPane.showMessageDialog(null, "Constraint violation while adding new user!");
      }          
} catch(SQLException sqle) {
        JOptionPane.showMessageDialog(null, "Adding of the user failed!");
}
```

danke dir Ebenius. Hat mir sehr geholfen. Dadurch, dass man den Errorcode abfragen kann, weiß man auch, dass wenn dieser 1062 zurückgibt eine Duplicate-Verletzung, also in diesem Fall im Zusammenhang mit Unique vorliegt.
Somit kann man auch genau auf eine Unique-Verletzung überprüfen 

greetz CroweHammer


----------

