Declarando try catch

Pessoal, para cada parte do método eu tenho que declarar o catch?

Por que existem 4 partes do meu método que podem ocorrer exeções, mas todos os tratamentos são iguais, não tem como colocar uma coisa mais global?

Exemplo:


package controller;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Observable;
import javax.swing.JOptionPane;
import view.InterfaceAgenda;
import view.TabelaDeVisualizacao;

public class Agenda extends Observable implements ActionListener {

	@Override
	public void actionPerformed(ActionEvent ev) {
		if (ev.getSource() == InterfaceAgenda.botao1) {
			try {
				new InserirContato().inserir(
						InterfaceAgenda.nomeFieldInserir.getText(),
						InterfaceAgenda.telefoneFieldInserir.getText(),
						InterfaceAgenda.emailFieldInserir.getText());
				JOptionPane.showMessageDialog(null,
						"Cadastro realizado com sucesso");

			} catch (ClassNotFoundException e) {
				JOptionPane.showMessageDialog(null,
						"Driver do banco de dados não encontrado.");
			} catch (SQLException e) {
				JOptionPane.showMessageDialog(null,
						"Ocorreu um erro com o banco de dados");
			}
		} else if (ev.getSource() == InterfaceAgenda.botao2) {
			String id = InterfaceAgenda.idFieldVisualizar.getText();
			if (id == null) {
				JOptionPane.showMessageDialog(null, "Digite um ID");
			} else {
				try {
					int i = Integer.parseInt(id);
					ArrayList lista = new VisualizarContato().obterDados(id);
					new TabelaDeVisualizacao(lista);
				} catch (NumberFormatException nfe) {
					JOptionPane.showMessageDialog(null, "Digite um ID válido");
				}
			}
		} else if (ev.getSource() == InterfaceAgenda.botao3) {
			try {
				new AtualizarContato().atualizar(
						InterfaceAgenda.idFieldAtualizar.getText(),
						InterfaceAgenda.nomeFieldAtualizar.getText(),
						InterfaceAgenda.telefoneFieldAtualizar.getText(),
						InterfaceAgenda.emailFieldAtualizar.getText());
				JOptionPane.showMessageDialog(null,
						"Atualização realizada com sucesso");

			} catch (ClassNotFoundException e) {
				JOptionPane.showMessageDialog(null,
						"Driver do banco de dados não encontrado.");
			} catch (SQLException e) {
				JOptionPane.showMessageDialog(null,
						"Ocorreu um erro com o banco de dados");
			}
		} else if (ev.getSource() == InterfaceAgenda.botao4) {

		} else if (ev.getSource() == InterfaceAgenda.botao5) {

		}
	}
	public static void main(String[] args) {
		new InterfaceAgenda();
	}
}

neste caso que eh comum

} catch (ClassNotFoundException e) {  
                JOptionPane.showMessageDialog(null,  
                        "Driver do banco de dados não encontrado.");  
            } catch (SQLException e) {  
                JOptionPane.showMessageDialog(null,  
                        "Ocorreu um erro com o banco de dados");  
            }  

vc pode comecar o try antes dos ifs e terminar o catch depois dos ifs

Como não pensei nisso antes? :lol:

Valeu!

rs, estamos ae!

Só mais uma dúvida, se fosse em métodos diferentes eu tería que declarar duas vezes?

Exemplo:


void inserirContato() {
		try {
			new InserirContato().inserir(
					InterfaceAgenda.nomeFieldInserir.getText(),
					InterfaceAgenda.telefoneFieldInserir.getText(),
					InterfaceAgenda.emailFieldInserir.getText());
			JOptionPane.showMessageDialog(null,
					"Cadastro realizado com sucesso");

		} catch (ClassNotFoundException e) {
			JOptionPane.showMessageDialog(null,
					"Driver do banco de dados não encontrado.");
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null,
					"Ocorreu um erro com o banco de dados");
		}
	}

	void atualizarContato() {
		try {
			new AtualizarContato().atualizar(
					InterfaceAgenda.nomeFieldAtualizar.getText(),
					InterfaceAgenda.telefoneFieldAtualizar.getText(),
					InterfaceAgenda.emailFieldAtualizar.getText());
			JOptionPane.showMessageDialog(null,
					"Atualização realizada com sucesso");

		} catch (ClassNotFoundException e) {
			JOptionPane.showMessageDialog(null,
					"Driver do banco de dados não encontrado.");
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null,
					"Ocorreu um erro com o banco de dados");
		}

	}

depende onde voce ira chamar esses metodos, se quiser voce pode passar a excecao para frente usando o Throws

void inserirContato() Throws ClassNotFoundException, SQLException { ...}

e a classe que chama o metodo voce coloca o try

[code]
void grava(Contato contato) {

try {

if(isAlteracao) {
atualizarContato
} else {
inserirContato();
}

} catch (ClassNotFoundException e) {
JOptionPane.showMessageDialog(null,
“Driver do banco de dados não encontrado.”);
} catch (SQLException e) {
JOptionPane.showMessageDialog(null,
“Ocorreu um erro com o banco de dados”);
} [/code]

Agora eu entendi bem a relação do throws com o try catch!

Valeu a cara! :smiley:

o certo seria, se voce estivesse trabalhando em camadas, a view ficar responsavel por mostrar os JOptionDialog, entao voce vais disparando por throws ate a view e mostra na tela.

Agora se quiser ir mais longe, voce pode criar suas proprias Classes que extendem Exception, e nela voce cria as mensagens, e quando alguma coisa acontecer voce dispara um throw new MinhaException()

Mas se voce ja entendeu e resolveu o que precisava esta de bom tamanho :smiley: