Dúvida sobre uma exception que não sei de onde vem!

8 respostas
M

:frowning: O código de exemplo abaixo, embora rode se eu tratar um IOException vindo do método listaTabProdutos() eu não tenho a menor idéia do porque ele aparece. Este método não publica nenhum IOException não tratado. Se alguém puder me ajudar será de grande ajuda. Obrigado.

import <a href="http://java.io">java.io</a>.<em>;

import java.sql.</em>;

import java.util.*;

public class QueryManager

{

private static final String NOME_ARQUIVO = QueryProdutos.txt;

private static final String DRIVER = jdbc.driver;

private static final String URL_BDJAVA = BDJava.url;

private static final String LOGIN = BDJava.login;

private static final String SENHA = BDJava.senha;
protected Properties consultas;
protected static QueryManager queryManager = new QueryManager(NOME_ARQUIVO);


private QueryManager(String arquivo) 
{
	consultas = new Properties();
	try
	{
		consultas.load(new FileInputStream(arquivo));
	}
	catch(IOException e)
	{
		System.out.println("Erro no nome do arquivo de conexão !");
		System.exit(0);
	}
}
public Connection getConnection() throws SQLException
{
	String driver = consultas.getProperty(DRIVER);
	String url = consultas.getProperty(URL_BDJAVA);
	String login = consultas.getProperty(LOGIN);
	String senha = consultas.getProperty(SENHA);
	System.setProperty("jdbc.driver",driver);
	return DriverManager.getConnection(url,login,senha);
}
public PreparedStatement getPreparedStatement(Connection conn, String nomeConsulta) throws SQLException 
{
	String sql = consultas.getProperty(nomeConsulta);
	return conn.prepareStatement(sql); 
}

}

import java.sql.<em>;

import <a href="http://java.io">java.io</a>.</em>;

public class ListaProdutosSingleton

{

public static final String PRODUTOS_SELECT_BY_NAME = produtos.selectByName;
public void listaTabProdutos() 
{
	QueryManager listaConsultas = QueryManager.queryManager;                     
	try
	{
	    Connection conn = listaConsultas.getConnection(); 	
		PreparedStatement ps = listaConsultas.getPreparedStatement(conn,PRODUTOS_SELECT_BY_NAME);
		ResultSet rs = ps.executeQuery(); 
		while(rs.next())
  			{
  				System.out.println("Nome = "+rs.getString("nome"));
  				 
  			} 
  		ps.close();
  		conn.close();
	}
	catch (SQLException e)
	{		
		System.out.println ('
 + Erro na conexão com o banco.”);

e.printStackTrace();

System.exit(1);

}
}
public static void main(String args[]) //throws IOException -> Com isso funciona !
{
	ListaTabProdutos tab = new ListaTabProdutos();
	tab.listaTabProdutos(); 
}

}

8 Respostas

rodrigousp

IOException é um erro de runtime… Tem milhares de outros erros assim. Não é porque o seu código não lança ioexception que o java não vai ter dificuldade em ler suas classes.

IOexception pode ser causado por exemplo, por você ter 2 jdk de versões diferentes na máquina.

Moral da história: o problema não é na sua classe. Pense nos fatores externos que poderiam estar gerando o erro.

caiofilipini

[Como diria o cv] PÉÉÉÉÉÉÉÉÉ! IOException é uma checked exception que estende java.lang.Exception, e não java.lang.RuntimeException.

rodrigousp

ops ! queria dizer que é tempo de execução …
tipo null point exception

caiofilipini

Então, NullPointerException é uma RuntimeException sim, mas IOException não.

rodrigousp

Então … acho que o termo que eu to usando que deve tar zuando… Quero dizer que IOexception é um erro que pode ser lançado por fatores externos… e o seu programa java pode não conseguir capturar esta excessão. E, existem erros que são lançados em run time, que a gente nao precisa ficar tratando. E não é porque a gente não trata a exceção ou porque a exceção é lançada em outro escopo que ela não vai interferir.

Bom … são exceções de classes distintas cuja única semelhança é o fato delas poderem ocorrer mesmo não sendo explicitamente declarados.

caiofilipini

Nops… :roll:
As Checked Exception (como IOException) sempre são declaradas. Pos isso são chamadas de Checked. :wink:

rodrigousp

São sim …
por exemplo … pelo ant, pelo eclipse , pelo diabo…
Vc não precisa tentar rodar dar um copy com o ant num diretório que vc não tenha permissão…

Ou vc acha que precisa dar um try … catch no ant !?

O mesmo pode acontecer com o tomcat.

cv1

Rodrigo, do que vc tá falando!? :lol:

Criado 15 de abril de 2004
Ultima resposta 20 de abr. de 2004
Respostas 8
Participantes 4