Re: JDBC behaviour - Mailing list pgsql-jdbc

From Sridhar N Bamandlapally
Subject Re: JDBC behaviour
Date
Msg-id CAGuFTBUm6833idGepWE9KBP87nYBuzHpTqwmf0981wCdS13K0w@mail.gmail.com
Whole thread Raw
In response to Re: JDBC behaviour  (Sridhar N Bamandlapally <sridhar.bn1@gmail.com>)
Responses Re: JDBC behaviour
Re: JDBC behaviour
List pgsql-jdbc
yes John, 

but why?, this is not expected behavior

autocommit is just autocommit, its not responsible to treat multi-transactions as single or independent 




On Thu, Feb 18, 2016 at 3:08 PM, Sridhar N Bamandlapally <sridhar.bn1@gmail.com> wrote:
let me put this way

table employee ( id PrimaryKey, name )

In Java ( just little pseudo-code way )

try {
conn.setAutoCommit(false);
     try { executeUpdate("insert into employee(id,name) values(1, 'K1')"); } catch ...
     try { executeUpdate("insert into employee(id,name) values(1, 'K1')"); } catch ...
     try { executeUpdate("insert into employee(id,name) values(1, 'K2')"); } catch ...
conn.commit();
} catch ...

throws error 
1. duplicate key value violates unique constraint "employee_pkey"
2. current transaction is aborted, commands ignored until end of transaction block


In PL/SQL ( similar error thrown when used BEGIN-END )

postgres=# begin;
BEGIN
postgres=# insert into employee values (1,'aa');
INSERT 0 1
postgres=# insert into employee values (2,'bb');
INSERT 0 1
postgres=# insert into employee values (3,'cc');
INSERT 0 1
postgres=# insert into employee values (1,'aa');
ERROR:  duplicate key value violates unique constraint "employee_pkey"
DETAIL:  Key (eid)=(1) already exists.
postgres=# insert into employee values (4,'dd');
ERROR:  current transaction is aborted, commands ignored until end of transaction block


my question Java setAutoCommit (false) is behaving like PL/SQL BEGIN-END




On Thu, Feb 18, 2016 at 2:54 PM, Andreas Joseph Krogh <andreas@visena.com> wrote:
På torsdag 18. februar 2016 kl. 10:20:51, skrev Sridhar N Bamandlapally <sridhar.bn1@gmail.com>:
setAutoCommit(false), it should not be treating all next transactions as single set, simple, this is what expected behavior
 
The point is that all subsequent statements (after an exception) are part of the same transaction (in autocommit=false mode). So you have to issue an explicit ROLLBACK before any new statement can give meaningful results.
 
--
Andreas Joseph Krogh
CTO / Partner - Visena AS
Mobile: +47 909 56 963
 


Attachment

pgsql-jdbc by date:

Previous
From: Sridhar N Bamandlapally
Date:
Subject: Re: JDBC behaviour
Next
From: Andreas Joseph Krogh
Date:
Subject: Re: JDBC behaviour