11
votes

Comment attraper une exception spécifique dans JDBC?

Comment prendre des exceptions spécifiques dans JDBC ? Exemples: Exception principale ou exception de la clé étrangère.


0 commentaires

6 Réponses :


7
votes

sqlexception contient une base de données Informations particulières liées à l'exception. Du doc:

Chaque sqlexception fournit plusieurs Types d'informations:

1) une chaîne décrivant l'erreur. Ceci est utilisé comme Le message d'exception Java, disponible via la méthode getmesage.

2) un "sqlstate" String, qui suit soit le Xopen Conventions Sqlstate ou SQL 99 conventions. Les valeurs de la SQLSTATE String est décrit dans le spécifications appropriées. La Databasemetadata méthode getqlstateType peut être utilisé pour Découvrez si le conducteur retourne le type XOPEN ou le type SQL 99.

3) un code d'erreur entier spécifique à chaque fournisseur. Normalement, ce sera le Code d'erreur réel renvoyé par le Base de données sous-jacente.

4) une chaîne à un prochain Exception. Cela peut être utilisé pour fournir Informations d'erreur supplémentaires.


0 commentaires

5
votes

Brian's Droite, une sqlexception sera jetée pour tout un problème JDBC. Ceci est partiellement pourquoi JDBC est si ennuyeux. Library JDBC JDBC Un Traducteur d'exception Pour regarder le SQLCODE, SQLSTAT, etc., et jetez le DataAccessException . Il y a beaucoup de ces classes d'exception et ils vous donnent une meilleure idée de ce qui s'est mal passé, avec des noms tels que DataTainegrityViolationException, DataSourcelookUpFailuerException, PermissionDeniedDataaccessException et autres.


1 commentaires

^ Liste des grandes ressources ^. Il y a tellement de printemps que je souhaiterais avoir le temps d'examiner chaque bi de l'API. Quoi qu'il en soit, je voulais aussi jeter là-bas, on dirait que la question était subliminalement, le pointage de manière subliminale à un insert était le PK ou le FK est identique et ne peut donc pas insérer. Si tel est le cas, vous pouvez attraper une explication de donnéesViolationException, mais plus la poignée appropriée serait d'utiliser une clause Fusion SQL au lieu d'un insert. Voir en.wikipedia.org/wiki/merge_(SQL)



27
votes

La meilleure et indépendante de DB de gérer SQLException code> est spécifiquement spécifiquement consiste à déterminer le code d'état SQL pouvant être obtenu par SQLEXCEPTION # GETQLSTATE () CODE> . Le SQLSTAT est un code 5 caractères, dont les deux premiers sont courants parmi tous les DB et les trois derniers pourraient différer en fonction de la DB et / ou de la condition spécifique. Voici un extrait de SPEC :

  • 02: pas de données li>
  • 07: erreur SQL dynamique li>
  • 08: Exception de connexion LI>
  • 0A: Fonction non prise en charge li>
  • 21: violation de cardinalité li>
  • 22: Exception de données LI>
  • 23: Violation de la contrainte d'intégrité li>
  • 24: état du curseur non valide li>
  • 25: état de transaction non valide li>
  • 26: Nom de l'instruction SQL non valide LI>
  • 28: Spécification d'autorisation non valide li>
  • 2b: Descripteurs de privilèges dépendants existent toujours li>
  • 2C: Nom de jeu de caractères non valide LI>
  • 2D: terminaison de transaction non valide li>
  • 2E: Nom de la connexion non valide Li>
  • 33: Nom de descripteur SQL non valide LI>
  • 34: Nom du curseur non valide LI>
  • 35: Numéro de condition non valide Li>
  • 3C: Nom du curseur ambigu Li>
  • 3D: Nom du catalogue non valide LI>
  • 3F: Nom de schéma invalide LI> ul>

    afin de déterminer si l'exception SQL est causée par une violation de contrainte, vous pouvez simplement effectuer ce qui suit dans un (fictif) SQLUTIL code> Classe: P>

    public static boolean isConstraintViolation(SQLException e) {
        return e.getSQLState().startsWith("23");
    }
    


1 commentaires

Je peux obtenir un message verbeux de mon exception en informant que ma nouvelle ligne viole certaines contraintes, mais lorsque je fais un e.getsqlstate () afin de personnaliser mon message, je reçois toujours un null < / code> valeur. Y a-t-il un moyen de surmonter cela?



5
votes

Suivi sur La réponse de Baluscs , voici une liste plus complète et récente de toutes les classes et sous-classes comme spécifié par le SQL: Standard 2011. Je viens de rassembler cette liste pour le JAVADOC de JOOQ'S SQLSTATESUCLASCLASS CODE> .

+----+-----------------------------------------------------------+-----+--------------------------------------------------------------+
| Class and class description                                    | Subclass and subclass description                                  |
+----+-----------------------------------------------------------+-----+--------------------------------------------------------------+
| 00 | Successful completion                                     | 000 | No subclass                                                  |
| 01 | Warning                                                   | 000 | No subclass                                                  |
| 01 | Warning                                                   | 001 | Cursor operation conflict                                    |
| 01 | Warning                                                   | 002 | Disconnect error                                             |
| 01 | Warning                                                   | 003 | Null value eliminated in set function                        |
| 01 | Warning                                                   | 004 | String data, right truncation                                |
| 01 | Warning                                                   | 005 | Insufficient item descriptor areas                           |
| 01 | Warning                                                   | 006 | Privilege not revoked                                        |
| 01 | Warning                                                   | 007 | Privilege not granted                                        |
| 01 | Warning                                                   | 009 | Search condition too long for information schema             |
| 01 | Warning                                                   | 00A | Query expression too long for information schema             |
| 01 | Warning                                                   | 00B | Default value too long for information schema                |
| 01 | Warning                                                   | 00C | Result sets returned                                         |
| 01 | Warning                                                   | 00D | Additional result sets returned                              |
| 01 | Warning                                                   | 00E | Attempt to return too many result sets                       |
| 01 | Warning                                                   | 00F | Statement too long for information schema                    |
| 01 | Warning                                                   | 012 | Invalid number of conditions                                 |
| 01 | Warning                                                   | 02F | Array data, right truncation                                 |
| 02 | No data                                                   | 000 | No subclass                                                  |
| 02 | No data                                                   | 001 | No additional result sets returned                           |
| 07 | Dynamic SQL Error                                         | 000 | No subclass                                                  |
| 07 | Dynamic SQL Error                                         | 001 | Using clause does not match dynamic parameter specifications |
| 07 | Dynamic SQL Error                                         | 002 | Using clause does not match target specifications            |
| 07 | Dynamic SQL Error                                         | 003 | Cursor specification cannot be executed                      |
| 07 | Dynamic SQL Error                                         | 004 | Using clause required for dynamic parameters                 |
| 07 | Dynamic SQL Error                                         | 005 | Prepared statement not a cursor specification                |
| 07 | Dynamic SQL Error                                         | 006 | Restricted data type attribute violation                     |
| 07 | Dynamic SQL Error                                         | 007 | Using clause required for result fields                      |
| 07 | Dynamic SQL Error                                         | 008 | Invalid descriptor count                                     |
| 07 | Dynamic SQL Error                                         | 009 | Invalid descriptor index                                     |
| 07 | Dynamic SQL Error                                         | 00B | Data type transform function violation                       |
| 07 | Dynamic SQL Error                                         | 00C | Undefined DATA value                                         |
| 07 | Dynamic SQL Error                                         | 00D | Invalid DATA target                                          |
| 07 | Dynamic SQL Error                                         | 00E | Invalid LEVEL value                                          |
| 07 | Dynamic SQL Error                                         | 00F | Invalid DATETIME_INTERVAL_CODE                               |
| 08 | Connection exception                                      | 000 | No subclass                                                  |
| 08 | Connection exception                                      | 001 | SQL-client unable to establish SQL-connection                |
| 08 | Connection exception                                      | 002 | Connection name in use                                       |
| 08 | Connection exception                                      | 003 | Connection does not exist                                    |
| 08 | Connection exception                                      | 004 | SQL-server rejected establishment of SQL-connection          |
| 08 | Connection exception                                      | 006 | Connection failure                                           |
| 08 | Connection exception                                      | 007 | Transaction resolution unknown                               |
| 09 | Triggered action exception                                | 000 | No subclass                                                  |
| 0A | Feature not supported                                     | 000 | No subclass                                                  |
| 0A | Feature not supported                                     | 001 | Multiple server transactions                                 |
| 0D | Invalid target type specification                         | 000 | No subclass                                                  |
| 0E | Invalid schema name list specification                    | 000 | No subclass                                                  |
| 0F | Locator exception                                         | 000 | No subclass                                                  |
| 0F | Locator exception                                         | 001 | Invalid specification                                        |
| 0L | Invalid grantor                                           | 000 | No subclass                                                  |
| 0M | Invalid SQL-invoked procedure reference                   | 000 | No subclass                                                  |
| 0P | Invalid role specification                                | 000 | No subclass                                                  |
| 0S | Invalid transform group name specification                | 000 | No subclass                                                  |
| 0T | Target table disagrees with cursor specification          | 000 | No subclass                                                  |
| 0U | Attempt to assign to non-updatable column                 | 000 | No subclass                                                  |
| 0V | Attempt to assign to ordering column                      | 000 | No subclass                                                  |
| 0W | Prohibited statement encountered during trigger execution | 000 | No subclass                                                  |
| 0W | Prohibited statement encountered during trigger execution | 001 | Modify table modified by data change delta table             |
| 0Z | Diagnostics exception                                     | 000 | No subclass                                                  |
| 0Z | Diagnostics exception                                     | 001 | Maximum number of stacked diagnostics areas exceeded         |
| 21 | Cardinality violation                                     | 000 | No subclass                                                  |
| 22 | Data exception                                            | 000 | No subclass                                                  |
| 22 | Data exception                                            | 001 | String data, right truncation                                |
| 22 | Data exception                                            | 002 | Null value, no indicator parameter                           |
| 22 | Data exception                                            | 003 | Numeric value out of range                                   |
| 22 | Data exception                                            | 004 | Null value not allowed                                       |
| 22 | Data exception                                            | 005 | Error in assignment                                          |
| 22 | Data exception                                            | 006 | Invalid interval format                                      |
| 22 | Data exception                                            | 007 | Invalid datetime format                                      |
| 22 | Data exception                                            | 008 | Datetime field overflow                                      |
| 22 | Data exception                                            | 009 | Invalid time zone displacement value                         |
| 22 | Data exception                                            | 00B | Escape character conflict                                    |
| 22 | Data exception                                            | 00C | Invalid use of escape character                              |
| 22 | Data exception                                            | 00D | Invalid escape octet                                         |
| 22 | Data exception                                            | 00E | Null value in array target                                   |
| 22 | Data exception                                            | 00F | Zero-length character string                                 |
| 22 | Data exception                                            | 00G | Most specific type mismatch                                  |
| 22 | Data exception                                            | 00H | Sequence generator limit exceeded                            |
| 22 | Data exception                                            | 00P | Interval value out of range                                  |
| 22 | Data exception                                            | 00Q | Multiset value overflow                                      |
| 22 | Data exception                                            | 010 | Invalid indicator parameter value                            |
| 22 | Data exception                                            | 011 | Substring error                                              |
| 22 | Data exception                                            | 012 | Division by zero                                             |
| 22 | Data exception                                            | 013 | Invalid preceding or following size in window function       |
| 22 | Data exception                                            | 014 | Invalid argument for NTILE function                          |
| 22 | Data exception                                            | 015 | Interval field overflow                                      |
| 22 | Data exception                                            | 016 | Invalid argument for NTH_VALUE function                      |
| 22 | Data exception                                            | 018 | Invalid character value for cast                             |
| 22 | Data exception                                            | 019 | Invalid escape character                                     |
| 22 | Data exception                                            | 01B | Invalid regular expression                                   |
| 22 | Data exception                                            | 01C | Null row not permitted in table                              |
| 22 | Data exception                                            | 01E | Invalid argument for natural logarithm                       |
| 22 | Data exception                                            | 01F | Invalid argument for power function                          |
| 22 | Data exception                                            | 01G | Invalid argument for width bucket function                   |
| 22 | Data exception                                            | 01H | Invalid row version                                          |
| 22 | Data exception                                            | 01S | Invalid XQuery regular expression                            |
| 22 | Data exception                                            | 01T | Invalid XQuery option flag                                   |
| 22 | Data exception                                            | 01U | Attempt to replace a zero-length string                      |
| 22 | Data exception                                            | 01V | Invalid XQuery replacement string                            |
| 22 | Data exception                                            | 01W | Invalid row count in fetch first clause                      |
| 22 | Data exception                                            | 01X | Invalid row count in result offset clause                    |
| 22 | Data exception                                            | 020 | Invalid period value                                         |
| 22 | Data exception                                            | 021 | Character not in repertoire                                  |
| 22 | Data exception                                            | 022 | Indicator overflow                                           |
| 22 | Data exception                                            | 023 | Invalid parameter value                                      |
| 22 | Data exception                                            | 024 | Unterminated C string                                        |
| 22 | Data exception                                            | 025 | Invalid escape sequence                                      |
| 22 | Data exception                                            | 026 | String data, length mismatch                                 |
| 22 | Data exception                                            | 027 | Trim error                                                   |
| 22 | Data exception                                            | 029 | Noncharacter in UCS string                                   |
| 22 | Data exception                                            | 02D | Null value substituted for mutator subject parameter         |
| 22 | Data exception                                            | 02E | Array element error                                          |
| 22 | Data exception                                            | 02F | Array data, right truncation                                 |
| 22 | Data exception                                            | 02G | Invalid repeat argument in sample clause                     |
| 22 | Data exception                                            | 02H | Invalid sample size                                          |
| 23 | Integrity constraint violation                            | 000 | No subclass                                                  |
| 23 | Integrity constraint violation                            | 001 | Restrict violation                                           |
| 24 | Invalid cursor state                                      | 000 | No subclass                                                  |
| 25 | Invalid transaction state                                 | 000 | No subclass                                                  |
| 25 | Invalid transaction state                                 | 001 | Active SQL-transaction                                       |
| 25 | Invalid transaction state                                 | 002 | Branch transaction already active                            |
| 25 | Invalid transaction state                                 | 003 | Inappropriate access mode for branch transaction             |
| 25 | Invalid transaction state                                 | 004 | Inappropriate isolation level for branch transaction         |
| 25 | Invalid transaction state                                 | 005 | No active SQL-transaction for branch transaction             |
| 25 | Invalid transaction state                                 | 006 | Read-only SQL-transaction                                    |
| 25 | Invalid transaction state                                 | 007 | Schema and data statement mixing not supported               |
| 25 | Invalid transaction state                                 | 008 | Held cursor requires same isolation level                    |
| 26 | Invalid SQL statement name                                | 000 | No subclass                                                  |
| 27 | Triggered data change violation                           | 000 | No subclass                                                  |
| 27 | Triggered data change violation                           | 001 | Modify table modified by data change delta table             |
| 28 | Invalid authorization specification                       | 000 | No subclass                                                  |
| 2B | Dependent privilege descriptors still exist               | 000 | No subclass                                                  |
| 2C | Invalid character set name                                | 000 | No subclass                                                  |
| 2C | Invalid character set name                                | 001 | Cannot drop SQL-session default character set                |
| 2D | Invalid transaction termination                           | 000 | No subclass                                                  |
| 2E | Invalid connection name                                   | 000 | No subclass                                                  |
| 2F | SQL routine exception                                     | 000 | No subclass                                                  |
| 2F | SQL routine exception                                     | 002 | Modifying SQL-data not permitted                             |
| 2F | SQL routine exception                                     | 003 | Prohibited SQL-statement attempted                           |
| 2F | SQL routine exception                                     | 004 | Reading SQL-data not permitted                               |
| 2F | SQL routine exception                                     | 005 | Function executed no return statement                        |
| 2H | Invalid collation name                                    | 000 | No subclass                                                  |
| 30 | Invalid SQL statement identifier                          | 000 | No subclass                                                  |
| 33 | Invalid SQL descriptor name                               | 000 | No subclass                                                  |
| 34 | Invalid cursor name                                       | 000 | No subclass                                                  |
| 35 | Invalid condition number                                  | 000 | No subclass                                                  |
| 36 | Cursor sensitivity exception                              | 000 | No subclass                                                  |
| 36 | Cursor sensitivity exception                              | 001 | request rejected                                             |
| 36 | Cursor sensitivity exception                              | 002 | request failed                                               |
| 38 | External routine exception                                | 000 | No subclass                                                  |
| 38 | External routine exception                                | 001 | Containing SQL not permitted                                 |
| 38 | External routine exception                                | 002 | Modifying SQL-data not permitted                             |
| 38 | External routine exception                                | 003 | Prohibited SQL-statement attempted                           |
| 38 | External routine exception                                | 004 | Reading SQL-data not permitted                               |
| 39 | External routine invocation exception                     | 000 | No subclass                                                  |
| 39 | External routine invocation exception                     | 004 | Null value not allowed                                       |
| 3B | Savepoint exception                                       | 000 | No subclass                                                  |
| 3B | Savepoint exception                                       | 001 | Invalid specification                                        |
| 3B | Savepoint exception                                       | 002 | Too many                                                     |
| 3C | Ambiguous cursor name                                     | 000 | No subclass                                                  |
| 3D | Invalid catalog name                                      | 000 | No subclass                                                  |
| 3F | Invalid schema name                                       | 000 | No subclass                                                  |
| 40 | Transaction rollback                                      | 000 | No subclass                                                  |
| 40 | Transaction rollback                                      | 001 | Serialization failure                                        |
| 40 | Transaction rollback                                      | 002 | Integrity constraint violation                               |
| 40 | Transaction rollback                                      | 003 | Statement completion unknown                                 |
| 40 | Transaction rollback                                      | 004 | Triggered action exception                                   |
| 42 | Syntax error or access rule violation                     | 000 | No subclass                                                  |
| 44 | With check option violation                               | 000 | No subclass                                                  |
| HZ | Remote database access                                    | 000 | No subclass                                                  |
+----+-----------------------------------------------------------+-----+--------------------------------------------------------------+


0 commentaires

0
votes

Vous pouvez également utiliser getterrrorroCode () pour gérer les exceptions correctement, particulièrement utile lorsque vous travaillez avec des procédures ou des fonctions stockées et que vous avez vos propres codes d'erreur personnalisés.

Il peut être utile que quelqu'un ait un contexte similaire.


0 commentaires

0
votes

Dans la clause de capture, vous pouvez être plus spécifique pour gérer que exception . xxx


2 commentaires

Il est généralement préférable d'utiliser une clause de capture spécifique supplémentaire, au lieu d'utiliser si.


Bien sûr, j'ai ajouté le sucre, vous avez fini avec l'ajout de thé! Mais je préfère de cette façon parce que avant d'entrer dans le si J'utilise habituellement l'exception générale et pour moi, il est plus maintenu, mais le choix est toujours dépendant du développeur.