| From: | Vladimir Stankovic <V(dot)Stankovic(at)city(dot)ac(dot)uk> | 
|---|---|
| To: | pgsql-jdbc(at)postgresql(dot)org | 
| Subject: | No exception with concurrent updates | 
| Date: | 2004-07-14 16:59:25 | 
| Message-ID: | E1Bkn6M-00020F-00@ms2.city.ac.uk | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-jdbc | 
Dear all,
I wrote (extremely) simple programme in Java (jsdk1.4.2) to examine the 
PostgreSQL's (v7.2.4, I know, rather obsolete) handling of concurrent 
updates and I'm confused with the fact that the server (running on a remote 
machine with Red Hat Linux 6.0) does not give me any kind of exception when 
I execute the following code on the client machine running Win 2000. While 
running the programme in the debug mode the excution just hangs when the 
UPDATE query of the transaction2() is executed. Using setQueryTimeout() 
won't help much since it is available as of 7.3 version, isn't it. I set 
autocommit off and specify TRANSACTION_SERIALIZABLE on the Connection 
objects. I'm using the pg73jdbc3.jar and NetBeans 3.5.
/*
 * ConcurencyTest.java
 * Created on 09 July 2004, 15:39
 */
import java.sql.*;
public class ConcurrencyTest 
{    
    Connection con1, con2; 
    
    public ConcurrencyTest()
    {
        /*
          ConnectionManager object creates Connection and the
          GetConnection() method returns the reference. Value of
          128 specifies the JDBC connection (rather than ODBC).
         */
        con1 = new ConnectionManager(128).GetConnection();
        con2 = new ConnectionManager(128).GetConnection();
        
        transaction1();
        transaction2();      
        
        try 
        {
           con2.commit();
           con1.commit();
           //con1.close();
           //con2.close();
        }
        catch (SQLException sqle)
        {
            System.out.println("Could not close the connection");
        }
        
    }    
    
    public void transaction1()
    {
        try
        {
            con1.commit();
            Statement sta1 = con1.createStatement();
            sta1.setQueryTimeout(5);
            rs_1 = sta1.executeQuery("SELECT * FROM Orderline WHERE ol_o_id 
= 1 AND ol_d_id = 1 AND ol_w_id = 1 AND ol_number = 4");
            while (rs_1.next())
                System.out.println(rs_1.getInt(8) + "\tT1");
            rs_1.close();
            
            sta1.executeUpdate("UPDATE Orderline SET ol_quantity = 10 WHERE 
ol_o_id = 1 AND ol_d_id = 1 AND ol_w_id = 1 AND ol_number = 4");
            
            sta1.close();
        }
        catch (SQLException sqle)
        {
            System.out.println("Error in Transaction 1: " + sqle);
        }
        
    }
    
    public void transaction2()
    {
        try
        {
            con2.commit();
            Statement sta2 = con2.createStatement();
            sta2.setQueryTimeout(5);
            ResultSet rs_2 = sta2.executeQuery("SELECT * FROM Orderline 
WHERE ol_o_id = 1 AND ol_d_id = 1 AND ol_w_id = 1 AND ol_number = 4");
            while (rs_2.next())
                System.out.println(rs_2.getInt(8) + "\tT2");
            rs_2.close();
            
            
            sta2.executeUpdate("UPDATE Orderline SET ol_quantity = 20 WHERE 
ol_o_id = 1 AND ol_d_id = 1 AND ol_w_id = 1 AND ol_number = 4");
            
            sta2.close();
        }
        catch (SQLException sqle)
        {
            System.out.println("Error in Transaction 2: " + sqle);
           
        }
        
    }
    
    public static void main(String args[])
    {
        new ConcurrencyTest();
    }
}
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Dave Cramer | 2004-07-14 18:54:54 | Re: No exception with concurrent updates | 
| Previous Message | Kris Jurka | 2004-07-14 14:07:45 | Re: [Pginstaller-devel] Re: Windows port installer |