Erro no tratamento de erro

Estou com dúvidas para tratar este erro, é uma boa prática colocar um try identado a outro ???


public Transact() {
  Connection conn;
		
   try {
         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
         conn = DriverManager.getConnection("jdbc:odbc:Teste","","");
         Statement stmt = conn.createStatement();
			
         conn.setAutoCommit(false);
         try {
	stmt.executeUpdate(sql1);
	stmt.executeUpdate(sql2);
	stmt.executeUpdate(sql3);
			
                conn.commit();	
				
	System.out.println("ok");
          }
          catch(SQLException e) {
                conn.rollback(); 
                System.out.println("Transação falhou"); 
          }
          conn.setAutoCommit(true);
     }
     catch(ClassNotFoundException e) {
	System.out.println(e.toString());	
     }
     catch(SQLException e) {
	System.out.println(e.toString());	
     }
}

Eu não consegui tratar o Rollback com o catch mais abaixo, pois ele não tinha certeza de que o objeto conn havia instânciado, então resolvi colocar um try dentro de outro e funcionou !!!

Estou na caminho certo ???

eu diria q naum =]

xeu dizer como eu colocaria…

[code]
public Transact() {
Connection conn;
Statement stmt;
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn = DriverManager.getConnection("jdbc:odbc:Teste","","");
stmt = conn.createStatement();
conn.setAutoCommit(false);

     stmt.executeUpdate(sql1);
     stmt.executeUpdate(sql2);
     stmt.executeUpdate(sql3);   
     conn.commit();

     System.out.println("ok");
 }
 catch(ClassNotFoundException e) {
    System.out.println(e.toString());
 }
 catch(SQLException e) {
   if ((conn != null) && (stmt != null)) {
       try {
          conn.rollback();
       } catch(SQLException e) {}
       System.out.println("Transação falhou");
       return;
   }
   System.out.println(e.toString());   
 } finally {
       if (conn != null)
            try { conn.setAutoCommit(true);}
            catch(SQLException e) {}
 }

} [/code] axo melhor assim

O Tomaz tem razão para poder usar um rollbak dentro de um catch não tem jeito tem que usar um outro try, a conexão já lança a exceção pra frente, é obrigação de quem usar capturar. O exemplo do Tomaz é mais correto do ponto de vista de boas práticas.