Parece que mysql arroja un código de error 1062 para la clave principal duplicada. Puede verificar el código de error para su excepción sql:
public static final int MYSQL_DUPLICATE_PK = 1062;
try{
//code that throws sql exception
} catch(SQLException e){
if(e.getErrorCode() == MYSQL_DUPLICATE_PK ){
//duplicate primary key
}
}
Tenga en cuenta que este enfoque no es de proveedores de bases de datos cruzadas, porque diferentes proveedores pueden tener diferentes códigos de error para PK duplicado.