hi Irum
did you see 
http://mail-archives.eu.apache.org/mod_mbox/db-derby-dev/200501.mbox/[EMAIL 
PROTECTED]
it's about hsql isolation (and derby)
gr
wim
search on google with hsqldb isolation


On Wed, 30 Mar 2005 12:24:14 -0800 (PST), Irum Godil
<[EMAIL PROTECTED]> wrote:
> Hi, 
>   
> I downloaded HSQL version 1.8.0 from the website and wrote a small test that
> has 2 connection variables to the same database. I wanted to see how is
> locking for isolation support working. 
>   
> Both connections update the same row of the database. Unfortunately, this is
> allowed in the system, and I would expect that the second connections will
> not be able to do so, given the locking support. Following is my test and
> its results. Please see the bolded red lines where I am updating the 2 rows.
>   
> Also, when I run the test in version 1.7.3 I get the same results. Can
> someone please tell me if I have written something wrong, or if my locking
> understanding is incorrect. I will really appreciate your response. 
>   
> 
> public class IsolationIrumTest { 
> 
> 
>     Connection conn1;
>     Connection conn2;
>     //our connnection to the db - presist for life of program 
> 
>     // we dont want this garbage collected until we are done
>     public IsolationIrumTest(String db_file_name_prefix) throws Exception { 
>   // note more general exception 
> 
>         // Load the HSQL Database Engine JDBC driver
>         // hsqldb.jar should be in the class path or made part of the
> current jar
>         Class.forName("org.hsqldb.jdbcDriver"); 
> 
>        conn1 = DriverManager.getConnection("jdbc:hsqldb:"
>                                            + db_file_name_prefix,    //
> filenames
>                                            "sa",                     //
> username
>                                            "");           
>         
>         conn2 = DriverManager.getConnection("jdbc:hsqldb:"
>                 + db_file_name_prefix,    // filenames
>                 "sa",                     // username
>                 "");       
>         conn1.setAutoCommit(false);
>         conn2.setAutoCommit(false);
>     } 
> 
>     public void shutdown() throws SQLException { 
> 
>      update1("SHUTDOWN");
>    
>      
>         conn1.close();    // if there are no other open connection
>         conn2.close();
> //        
>         
>        
>     }
>     public synchronized void query1(String expression) throws SQLException {
> 
>         Statement st = null;
>         ResultSet rs = null; 
> 
>         st = conn1.createStatement();         // statement objects can be
> reused with 
> 
>         // repeated calls to execute but we
>         // choose to make a new one each time
>         rs = st.executeQuery(expression);    // run the query 
> 
>         // do something with the result set.
>         dump(rs);
>         st.close();    // NOTE!! if you close a statement the associated
> ResultSet is 
> 
>         // closed too
>         // so you should copy the contents to some other object.
>         // the result set is invalidated also  if you recycle an Statement
>         // and try to execute some other query before the result set has
> been
>         // completely examined.
>     } 
> 
>     public synchronized void query2(String expression) throws SQLException {
> 
>         Statement st = null;
>         ResultSet rs = null; 
> 
>         st = conn2.createStatement();         // statement objects can be
> reused with 
> 
>         // repeated calls to execute but we
>         // choose to make a new one each time
>         rs = st.executeQuery(expression);    // run the query 
> 
>         // do something with the result set.
>         dump(rs);
>         st.close();    // NOTE!! if you close a statement the associated
> ResultSet is 
> 
>         
>     } 
> 
>     
> 
>     public synchronized void update1(String expression) throws SQLException
> { 
> 
>         Statement st = null; 
> 
>         st = conn1.createStatement();    // statements 
> 
>         int i = st.executeUpdate(expression);    // run the query 
> 
>         if (i == -1) {
>             System.out.println("db error : " + expression);
>         } 
> 
>         st.close();
>     }    // void update() 
> 
>     
>     
>     public synchronized void update2(String expression) throws SQLException
> { 
> 
>         Statement st = null; 
> 
>         st = conn2.createStatement();    // statements 
> 
>         int i = st.executeUpdate(expression);    // run the query 
> 
>         if (i == -1) {
>             System.out.println("db error : " + expression);
>         } 
> 
>         st.close();
>     }    // void update() 
> 
>     
>     
>     
>     public static void dump(ResultSet rs) throws SQLException { 
> 
>         // the order of the rows in a cursor
>         // are implementation dependent unless you use the SQL ORDER
> statement
>         ResultSetMetaData meta   = rs.getMetaData();
>         int               colmax = meta.getColumnCount();
>         int               i;
>         Object            o = null; 
> 
>         // the result set is a cursor into the data.  You can only
>         // point to one row at a time
>         // assume we are pointing to BEFORE the first row
>         // rs.next() points to next row and returns true
>         // or false if there is no next row, which breaks the loop
>         for (; rs.next(); ) {
>             for (i = 0; i < colmax; ++i) {
>                 o = rs.getObject(i + 1);    // Is SQL the first column is
> indexed 
> 
>                 // with 1 not 0
>                 System.out.print(o.toString() + " ");
>             } 
> 
>             System.out.println(" ");
>         }
>     }                                       //void dump( ResultSet rs ) 
> 
>     public static void main(String[] args) { 
> 
>      IsolationIrumTest db = null; 
> 
>         try {
>             db = new IsolationIrumTest("db_file");
>         } catch (Exception ex1) {
>             ex1.printStackTrace();    // could not start db 
> 
>             return;                   // bye bye
>         } 
> 
>         try { 
> 
>          //FROM CONNECTION 1 
>             db.update1(
>                 "CREATE TABLE sample_table ( id INTEGER IDENTITY, str_col
> VARCHAR(256), num_col INTEGER, num_col2 INTEGER)");
>         } catch (SQLException ex2) { 
> 
>             //ignore
>             //ex2.printStackTrace();  // second time we run program
>             //  should throw execption since table
>             // already there
>             //
>             // this will have no effect on the db
>         } 
> 
>         try { 
> 
>             // add some rows - will create duplicates if run more then once
>             // the id column is automatically generated
>             db.update1(
>                 "INSERT INTO sample_table(str_col,num_col, num_col2)
> VALUES('Ford', 100, 50)");
>             
>             // do a query
>             db.query1("SELECT * FROM sample_table");
>             
>             
>             
> 
>             
>             //NOW UPDATE THROUGH CONNECTION1
>             db.update1("UPDATE sample_table SET num_col = '34' WHERE str_col
> = 'Ford'"); 
> 
>               System.out.println("From connection1: ");
> 
>             db.query1("SELECT * FROM sample_table");
>             
>             //now update throught connection2.
>             db.update2("UPDATE sample_table SET num_col = '36' WHERE str_col
> = 'Ford'");
>             
>             
>             System.out.println("From connection2: ");
>             db.query2("SELECT * FROM sample_table");           
>                                   
>             
>             // at end of program
>             db.shutdown();
>         } catch (SQLException ex3) {
>             ex3.printStackTrace();
>         }
>     }    // main()
> }    // class Testdb
>  
> 
>   
> 
> My Test Results are: 
> 
> 0 Ford 100 50 
> 
> From connection1: 
> 
> 0 Ford 34 50 
> 
> From connection2: 
> 
> 0 Ford 36 50 
> 
>   
> Thanks a lot. 
> Sincerely, 
> Irum Godil.
> 
> __________________________________________________
> Do You Yahoo!?
> Tired of spam? Yahoo! Mail has the best spam protection around 
> http://mail.yahoo.com


-------------------------------------------------------
This SF.net email is sponsored by Demarc:
A global provider of Threat Management Solutions.
Download our HomeAdmin security software for free today!
http://www.demarc.com/info/Sentarus/hamr30
_______________________________________________
hsqldb-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/hsqldb-developers

Reply via email to