Solo per rispondere ai dubbi sulle classi.

SQLException è la madre di tanti tipi di Exception. Tra i quali, SQLNonTransientException che è, a sua volta, la madre di SQLDataException.

Quindi, una SQLDataException è essa stessa una SQLException, solo più specifica.

Solitamente, quando si tenta di inserire un record che ha una chiave già presente, viene sollevata una SQLIntegrityConstraintViolationException (stai, in effetti, cercando di violare un vincolo di chiave) e non una SQLDataException.

Quest'ultima (SQLDataException) viene sollevata, generalmente, quando cerchi di passare dei valori non corretti per alcuni campi (esempio, una stringa per un campo numerico o di tipo datetime) o per i parametri in chiamata a funzioni del DB.


Ciao.