RES: PGJDBC 8 transaction problem - Mailing list pgsql-jdbc
From | Rodrigo Willian Bonatto |
---|---|
Subject | RES: PGJDBC 8 transaction problem |
Date | |
Msg-id | 54CC7CADE26E884EB2BCEC863F5C1F7001012FEF@moscou.diuno.net Whole thread Raw |
Responses |
Re: RES: PGJDBC 8 transaction problem
Re: RES: PGJDBC 8 transaction problem |
List | pgsql-jdbc |
Hi Oliver and Dave, I agree with you. I could use conn.commit(), but I have a particular environment here and I'll try to explain. My application use XML in my business tier to create and validate my business rules. My application use the connection provided by a data source Application Server and I use my own XML tags, like <query/> to get some information from database to be used in my business rules. Some times I need to update some records and use these data in my business rules and I need to this using my own XML tags. In some cases I use BEGIN with COMMIT in the body of my own XML tag <query/> to perform some updates and queries without java code. Using BEGIN and COMMIT with PGJDBC 7.4 works perfectly but not with version 8.x. I could use another XML tag to perform update separately from another SQL queries, but I would like to know if PGJDBC 8 supports BEGIN and COMMIT in a single statement. Regards, Rodrigo -----Mensagem original----- De: pgsql-jdbc-owner@postgresql.org [mailto:pgsql-jdbc-owner@postgresql.org] Em nome de Oliver Jowett Enviada em: segunda-feira, 5 de junho de 2006 10:25 Para: Rodrigo Willian Bonatto Cc: pgsql-jdbc@postgresql.org Assunto: Re: [JDBC] PGJDBC 8 transaction problem Rodrigo Willian Bonatto wrote: > query.append("BEGIN;"); > query.append("update employee set age = 28 where age = 27;"); > query.append("COMMIT;"); > query.append("select name from employee where age = 28"); > ResultSet rs = stmt.executeQuery(query.toString()); > > Here the resultset will return "John", but if I use PGJDBC driver > version 8 or greater, the statement return any result. The more recent drivers implement support for returning multiple resultsets from a query correctly, which older drivers didn't do. Your Statement will actually have four results associated with it -- one for each of BEGIN, UPDATE, COMMIT, SELECT. I would expect executeQuery() to throw an exception because the query returned something other than a single resultset. You will need to use Statement.execute() / Statement.getMoreResults() / Statement.getResultSet() to step to the 4th result and retrieve the SELECT's results (you could also get at the UPDATE's update count in a similar way). Also, you should avoid explicit BEGIN/COMMIT statements if you can -- Connection.setAutocommit() / Connection.commit() is the recommended way to manage transaction boundaries. -O ---------------------------(end of broadcast)--------------------------- TIP 4: Have you searched our list archives? http://archives.postgresql.org
pgsql-jdbc by date: