[ https://issues.apache.org/jira/browse/DERBY-6779?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14241825#comment-14241825 ]
Myrna van Lunteren commented on DERBY-6779: ------------------------------------------- There was a discussion about this issue on the user and dev lists which may contain further useful or background information: user list: http://apache-database.10148.n7.nabble.com/Duplicate-key-feature-request-tt143327.html dev spin off: http://apache-database.10148.n7.nabble.com/Fwd-Duplicate-key-feature-request-tt143371.html > Provide subclass of SQLException for duplicate key insertions > ------------------------------------------------------------- > > Key: DERBY-6779 > URL: https://issues.apache.org/jira/browse/DERBY-6779 > Project: Derby > Issue Type: Improvement > Components: JDBC, SQL > Reporter: John English > Priority: Minor > > A commonly-occurring situation is to take some special action when an insert > fails due to a duplicate key; for example, to update the existing row or to > retry the insert with a new key (e.g. mutate "Name" into "Name(1)", "Name(2)" > etc. until a unique key is found). At present this requires code similar to: > {noformat} > try { > //... insert new row > } > catch (SQLException e) { > if (e.getSQLState().equals(DUPLICATE_KEY)) { > // ... take recovery action > } > else { > throw e; > } > } > {noformat} > It would be more convenient if a subclass of SQLException were used to report > this precise error. The SQLIntegrityConstraintViolationException that is > currently thrown will also be thrown in other case where a constraint is > violated. A new exception subclass for this specific situation would not > affect any existing code, and would allow the code above to be simplified to > this: > {noformat} > try { > //... insert new row > } > catch (DuplicateKeyException e) { // or some other suitable name > // ... take recovery action > } > {noformat} > This would allow a more elegant, more O-O solution to what is, in my > experience, a common use case without having to discriminate based on the > value of getSQLState(). -- This message was sent by Atlassian JIRA (v6.3.4#6332)