addCountries(request.getParameterValues("countries"));
Следующий метод запускает транзакцию, выполняет запросы по одному, фиксирует, если все они были успешными, и откатывается, если была какая-либо ошибка.
private void addCountries(String[] countries)
{
Connection cn = <YOUR_CONNECTION_HERE>;
try
{
// Require Explicit Commit
cn.setAutoCommit(false);
// Construct Query
String sql = "insert into countries "
+ " (country_code) "
+ "values "
+ " (?) ";
// For each country
for(String country:countries)
{
PreparedStatement ps = cn.prepareStatement(sql);
ps.setString(1, country);
ps.executeUpdate();
ps.close();
}
// Explicitly Commit - This point reached with no Exceptions.
cn.commit();
}
catch (Exception e)
{
// Explicitly Rollback - There were errors along the way
cn.rollback();
e.printStackTrace();
}
finally
{
if(cn != null)
{
cn.close();
}
}
}
Пользоваться Exception нехорошо, поэтому я рекомендую изменить эту часть, чтобы перехватывать любые типы исключений, возможно, SQLException, среди прочих.