is a MySQL write lock automatically released when a pooled connection
is closed?
Greetings,
I am using JDBC (probably version 2), and I use code like this to open
and close connections:
Connection con=null;
Statement sqlstatement=null;
ResultSet sqlresults=null;
PreparedStatement pStatement=null;
try {
con=DriverManager.getConnection("name of connection pool");
....
} catch (SQLException e) {/*handle error*/);
} finally {
if(con!=null) try { con.close();} catch (SQLException e){}
if(sqlstatement!=null) try { sqlstatement.close();} catch
(SQLException e){}
if(pStatement!=null) try { pStatement.close();} catch
(SQLException e){}
if(sqlresults!=null) try { sqlresults.close();} catch
(SQLException e){}
}
Which I think is like belt and suspenders. In a new connection I will
be locking the table, and I need to be certain it is unlocked when I
am done. I am planning to add the "unlock tables" update to the first
line of the finally block, before the close(). I am wondering what
will happen if there is a hiccup (broken pipe in the connection pooler
or something) -- does the lock ever get released?
} catch (SQLException e) {/*handle error*/);
} finally {
if(con!=null) try {
sqlstatement.execute("UNLOCK TABLES;"); // (or whatever
con.close();
} catch (SQLException e){}
if(sqlstatement!=null) try { sqlstatement.close();} catch
(SQLException e){}
if(pStatement!=null) try { pStatement.close();} catch
(SQLException e){}
if(sqlresults!=null) try { sqlresults.close();} catch
(SQLException e){}
}
This really exposes a fundamental lack of understanding on my part
about the nature of connection pooling -- do temporary tables exist
for the life of pooled connections or just for the current use of the
connector? Variables? When are pooled connections ever actually
closed?
Thanx all!