Re: Multiple Statement result set problem with PreparedStatements
От | Oliver Jowett |
---|---|
Тема | Re: Multiple Statement result set problem with PreparedStatements |
Дата | |
Msg-id | 42D5CBC9.5000707@opencloud.com обсуждение исходный текст |
Список | pgsql-jdbc |
Lenard, Rohan (Rohan) wrote: > I have one but it relies on particular tables existing - if I get a few > minutes I too will simplify it to cause it .. Hm, ok, try the attached testcase. It works fine for me here against 8.0.1 and 7.3.8 servers: > oliver@extrashiny ~/pgjdbc-test $ java -classpath .:/home/oliver/pgjdbc/jars/postgresql.jar TestMultiInsert 'jdbc:postgresql://localhost:5432/test?user=oliver' > Result #1 has resultset? false update count 1 > Result #2 has resultset? false update count 1 > Result #3 has resultset? true update count -1 > oliver@extrashiny ~/pgjdbc-test $ java -classpath .:/home/oliver/pgjdbc/jars/postgresql.jar TestMultiInsert 'jdbc:postgresql://localhost:5738/test?user=oliver' > Result #1 has resultset? false update count 1 > Result #2 has resultset? false update count 1 > Result #3 has resultset? true update count -1 Those are the results I was expecting, anyway.. were you expecting something different? -O import java.sql.*; // Run with one argument: a JDBC url to connect to. public class TestMultiInsert { public static void main(String[] args) throws Exception { Class.forName("org.postgresql.Driver"); Connection c = DriverManager.getConnection(args[0]); c.setAutoCommit(false); Statement s = c.createStatement(); s.executeUpdate("CREATE SEQUENCE seq_i"); s.executeUpdate("CREATE SEQUENCE seq_j"); s.executeUpdate("CREATE TEMP TABLE t1 (i int4 default nextval('seq_i'), zz text)"); s.executeUpdate("CREATE TEMP TABLE t2 (j int4 default nextval('seq_j'), i int4, zz text)"); PreparedStatement ps = c.prepareStatement("INSERT INTO t1(zz) VALUES (?); INSERT INTO t2(i,zz) VALUES(currval('seq_i'),?);SELECT currval('seq_i'), currval('seq_j')"); ps.setString(1, "A"); ps.setString(2, "B"); boolean resultType = ps.execute(); int updateCount = ps.getUpdateCount(); int num = 1; do { System.err.println("Result #" + num + " has resultset? " + resultType + " update count " + updateCount); ++num; resultType = ps.getMoreResults(); updateCount = ps.getUpdateCount(); } while (resultType || updateCount != -1); s.close(); c.rollback(); c.close(); } }
В списке pgsql-jdbc по дате отправления: