Рассмотрим следующий код:
try (Connection conn = icrud.getConnection();
PreparedStatement ps = conn.prepareStatement("SELECT ID FROM TABLE_NAME");
ResultSet rs = ps.executeQuery();)
{
conn.setAutoCommit(false);
while (rs.next())
{
perform_something_method(conn, rs.getLong("ID"));
}
perform_something_method2(conn)
conn.commit();
}
catch(Exception e)
{
conn.rollback();
}
private void perform_something_method(Connection conn, long id) throws Exception
{
try (PreparedStatement ps = conn.prepareStatement("UPDATE TABLE1 SET LOGDATETIME=? WHERE ID=?");)
{
//perform some task
}
catch(Exception e)
{
throw e;
}
}
private void perform_something_method2(Connection conn) throws Exception
{
try (PreparedStatement ps = conn.prepareStatement("UPDATE TABLE1 SET LOGDATETIME=? WHERE ID=?");)
{
//perform some task
}
catch(Exception e)
{
throw e;
}
}
Как вы можете видеть, я создал Connection
объект и выполнил запрос, используя PreparedStatement
. В цикле While
я вызываю другой метод execute_something_method () для выполнения какого-либо процесса в наборе полученных результатов. Я передаю объект Connection
этому методу. Это безопасно?
В методе perform_something_method()
Я не закрываю, не фиксирую, не откатываю переданный объект Connection
, скорее, я выкидываю, если в нем возникает какое-либо исключениеэтот метод, чтобы он возвращался и выполнял откат.
Так что этот код является правильным / безопасным, так как я передаю объект соединения JDBC в качестве параметра метода. Дайте мне знать, если это может привести к потенциальному риску.