Re: Is a right behaviour on inserting a duplicate key?
От | Vernon Wu |
---|---|
Тема | Re: Is a right behaviour on inserting a duplicate key? |
Дата | |
Msg-id | BOJ63OIRL1X65094D8WT1A582OI06.3e48798c@kimiko обсуждение исходный текст |
Ответ на | Re: Is a right behaviour on inserting a duplicate key? ("David Wall" <d.wall@computer.org>) |
Список | pgsql-jdbc |
The behavior is not consist across all DBs' JDBC. The reason I posted the question is that I saw some sample code from Java.Sun site using the result value to detect whether inserting a duplicate key or not. I guess that I shall a select statement before a insertion one to find out whether the key exists or not. Thanks David for sharing your strategy. Vernon 09/02/2003 12:19:20 PM, "David Wall" <d.wall@computer.org> wrote: >> It seems to me that inserting a duplicate user would result an invalide >retured value. Instead, the action leads to a SQL >> expection as >> >> ERROR: Cannot insert a duplicate key into unique index pk_signon >> >> Can some clarify the 7.3.1 JDBC driver specification or implement in this >regards? > >I think throwing an exception is the correct thing to do and is consistent >with Oracle. The only downside is that detecting a duplicate key, something >that seems so ordinary in the database world that one has to wonder why a >special exception was not devised by JDBC to ensure a portable way to detect >it. We use some hacked code like the following to do so in our connection >pool code (obviously, only the public method is invoked by our mainline >code): > > protected boolean isPostgresqlDuplicateKey(SQLException e) > { > String msg = e.getMessage(); > if ( msg == null ) > return false; > return msg.indexOf("duplicate key") > 0; > } > > protected boolean isOracleDuplicateKey(SQLException e) > { > return e.getErrorCode() == 1; > } > > public boolean isDuplicateKey(SQLException e) > { > if ( e == null ) > return false; > if ( isOracle() ) > return isOracleDuplicateKey(e); > return isPostgresqlDuplicateKey(e); > } > > > >---------------------------(end of broadcast)--------------------------- >TIP 4: Don't 'kill -9' the postmaster >
В списке pgsql-jdbc по дате отправления: