Fechando com o Finally

14 respostas
Naruto
boa tarde... como eu faria para fechar isso com o finally???
public boolean inserir(ContatosDTO contatosDTO){
		try{
			Connection con = Conexao.getConnection();
			PreparedStatement stmt = con.prepareStatement("Insert into contatos" +
					"(nome, data, endereco) values(?,?,?)");
			
		
			
			stmt.setString(1, contatosDTO.getNome());			
			stmt.setDate(2, contatosDTO.getData());			
			stmt.setString(3, contatosDTO.getEndereco());
			
			stmt.execute();
			stmt.close();
			System.out.println("Gravado com sucesso!");
			con.close();
			return true;
			
		}catch (SQLException e){
			e.printStackTrace();
			return false;
		}
	}

pois c ouver um erro ela não fechara o.O alguem pode me ajudar??
vlwwwwww

14 Respostas

fnandos

finally{ con.close; return false; }

T

Declare o objeto Connection fora do try, é lógico.
Mais ou menos assim:

Connection conn = null;
try {
...
} finally {
    try {if (conn != null) conn.close();}catch (SQLException ex) {}
}
F
public boolean inserir(ContatosDTO contatosDTO){
	Connection con = Conexao.getConnection();
	try{
		PreparedStatement stmt = con.prepareStatement("Insert into contatos" +
				"(nome, data, endereco) values(?,?,?)");
			
		
			
		stmt.setString(1, contatosDTO.getNome());			
		stmt.setDate(2, contatosDTO.getData());			
		stmt.setString(3, contatosDTO.getEndereco());
			
		stmt.execute();
		System.out.println("Gravado com sucesso!");			
		}catch (SQLException e){
			e.printStackTrace();
			return false;
		} finally{  
			stmt.close();
			con.close;  
		}  
		return true;
	}
Naruto

nem consegui o.O

F

Naruto:
nem consegui o.O

o que aconteceu??? qual erro deu?

Naruto

tp ele não reconheceu o

} finally{ stmt.close(); con.close; } return true;

depois do catch ele nem reconhece o stmt.close();
e nem o con.close;

F

Naruto:
tp ele não reconheceu o

} finally{ stmt.close(); con.close; } return true;

depois do catch ele nem reconhece o stmt.close();
e nem o con.close;

vc tentou igual o thingol falou?

Naruto

igual a ele ainda não tinha feito igual ao seu deixa eu ver igual ao dele

Naruto

foda que eu não consegui afzer do jeito dele… so meio ignorante nisso ainda

fenrir

Todos os objetos que são criados dentro do try, não são visíveis fora dele (e o bloco catch e finally estão fora do try).

Portanto, você deveria fazer algo assim:

public boolean inserir(ContatosDTO contatosDTO){  
    Connection con = null;  
    PreparedStatement stmt = null;
    try{  
        con = Conexao.getConnection();  
        stmt = con.prepareStatement("Insert into contatos" +   "(nome, data, endereco) values(?,?,?)");  
        stmt.setString(1, contatosDTO.getNome());             
        stmt.setDate(2, contatosDTO.getData());           
        stmt.setString(3, contatosDTO.getEndereco());  

        stmt.execute();  
        System.out.println("Gravado com sucesso!");           
    }catch (SQLException e){  
        e.printStackTrace();  
        return false;  
    } finally{    
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException ignored) { }
        }
        if (con != null) {
            try {
                con.close();
            } catch (SQLException ignored) { }
        }
    }    
    return true;  
}
ViniGodoy

Você poderia ler o que o thingol escreveu...

Outra forma é fazer isso:

public void inserir(ContatosDTO contatosDTO){   
   try{   
      Connection con = Conexao.getConnection();   
      PreparedStatement stmt = con.prepareStatement("Insert into contatos" +   
         "(nome, data, endereco) values(?,?,?)");   
      try {   
         stmt.setString(1, contatosDTO.getNome());             
         stmt.setDate(2, contatosDTO.getData());           
         stmt.setString(3, contatosDTO.getEndereco());   
               
         stmt.execute();   
         stmt.close();   
         System.out.println("Gravado com sucesso!");   
         return true;                  
      } finally {
         if (stmt != null)
            stmt.close();
         if (con != null)
            con.close();
      }
   }catch (SQLException e){   
      throw new RuntimeException(e);
   }
}
Naruto

vlww a vcs dois vou estudar mais sobre isso o.O pis aida fiquei meio confuso de entender mas é isso mesmo que eu queria deu certim
vlwww

fenrir
ViniGodoy:
public void inserir(ContatosDTO contatosDTO){   
   try{   
      Connection con = Conexao.getConnection();   
      PreparedStatement stmt = con.prepareStatement("Insert into contatos" +   
         "(nome, data, endereco) values(?,?,?)");   
      try {   
         stmt.setString(1, contatosDTO.getNome());             
         stmt.setDate(2, contatosDTO.getData());           
         stmt.setString(3, contatosDTO.getEndereco());   
               
         stmt.execute();   
         stmt.close();   
         System.out.println("Gravado com sucesso!");   
         return true;                  
      } finally {
         if (stmt != null)
            stmt.close();
         if (con != null)
            con.close();
      }
   }catch (SQLException e){   
      throw new RuntimeException(e);
   }
}

Dessa forma, se der erro na criação do PreparedStatement, a conexão com o banco continuará ativa, já que ela seria fechada apenas no try interno.

ViniGodoy

Tem razão. Tem que declarar eles como nulo, e só inicia-los no try interno (é como eu normalmente fazia, antes do Spring):

public void inserir(ContatosDTO contatosDTO){     
   try{     
      Connection con = null;     
      PreparedStatement stmt = null;     
      try {     
         con = Conexao.getConnection();
         stmt = con.prepareStatement("Insert into contatos" +     
         "(nome, data, endereco) values(?,?,?)");

         stmt.setString(1, contatosDTO.getNome());               
         stmt.setDate(2, contatosDTO.getData());             
         stmt.setString(3, contatosDTO.getEndereco());     
                 
         stmt.execute();     
         stmt.close();     
         System.out.println("Gravado com sucesso!");     
         return true;                     
      } finally {   
         if (stmt != null)   
            stmt.close();   
         if (con != null)   
            con.close();   
      }   
   }catch (SQLException e){     
      throw new RuntimeException(e);   
   }   
}
Criado 24 de julho de 2008
Ultima resposta 24 de jul. de 2008
Respostas 14
Participantes 6