Guys, Such an "ugly" path is what Spring DAO does. I don't think it is so ugly, as long as there are no hard-coded error codes, but something more parameterizable like you have in Spring.
So the solutions would be: 1- use Spring with SqlMaps 2- or take from Spring the interesting bits and integrate them into your own design. On that one, I think the iBATIS DAO FW should provide this kind of thing out of the box (but not necessarily the SqlMaps FW, although it would be good to have that here as well) Cheers Jean-Francois -----Original Message----- From: Larry Meadors [mailto:[EMAIL PROTECTED] Sent: Thursday, February 24, 2005 4:02 AM To: ibatis-user-java@incubator.apache.org Subject: Re: Duplicate Key in Db Man guys, this is going down a really ugly path. What happens when you get a new driver, and the message changes from "Invalid key" to "Duplicate key"? Your app is broken. This path to me seems to be fraught with peril. ;-) I still say that the stored procedure is the safest, simplest, fastest, and most controllable route to take. Larry On Wed, 23 Feb 2005 14:48:24 -0600, Brent Worden <[EMAIL PROTECTED]> wrote: > You might also try to examine the errorCode property of the NestedSQLException or the wrapped SQLexception. It should hold a vendor specific code that identifies the type of database error. > > ----- Original Message ----- > From: "Brice Ruth" <[EMAIL PROTECTED]> > To: ibatis-user-java@incubator.apache.org, "Tim Christopher" <[EMAIL PROTECTED]> > Subject: Re: Duplicate Key in Db > Date: Wed, 23 Feb 2005 14:32:25 -0600 > > > > > I think you need to catch a DaoException, and check its cause. If its > > cause is a NestedSqlException, you'll need to interrogate that to > > determine what the "real" cause was. In your case, it appears a > > generic exception is thrown by the JDBC driver > > (com.borland.datastore.driver.SqlState), with a "Runtime Error" - > > you'll probably need to parse for "Duplicate key" to determine if > > that's what's being thrown. > > > > I've had to do something similar ... it certainly isn't elegant, at > > least not the way I did it! Maybe someone else has a better > > suggestion. > > > > > > On Wed, 23 Feb 2005 20:23:23 +0000, Tim Christopher > > <[EMAIL PROTECTED]> wrote: > > > >> You can do that now. Maybe I'm missing something? > > > >> The Ibatis insert() statement throws a SQLException.. .. > > > > > > Below is the first part of stack dump that is triggers by the failed > > > insertion, so should I be catching a DaoException or > > > NestedSQLException?... Or is there anything else I can do? > > > > > > >>>>>> > > > StandardWrapperValve[action]: Servlet.service() for servlet action > > > threw exception > > > com.ibatis.dao.client.DaoException: Failed to update - id > > > [insertModule] - parameterObject [EMAIL PROTECTED] Cause: > > > com.ibatis.common.jdbc.exception.NestedSQLException: > > > --- The error occurred in com/socs/persistence/sqlmapdao/sql/Module.xml. > > > --- The error occurred while applying a parameter map. > > > --- Check the insertModule-InlineParameterMap. > > > --- Check the statement (update failed). > > > --- Cause: com.borland.datastore.driver.SqlState: Runtime Error: [line > > > 1, col 6] Duplicate key value for $UNIQUE$1 sort order in "MODULE". > > > Caused by: com.borland.datastore.driver.SqlState: Runtime Error: [line > > > 1, col 6] Duplicate key value for $UNIQUE$1 sort order in "MODULE". > > > <<<<<< > > > > > > Tim Christopher > > > > >