Outro erro. Alguém ajuda? obrigado

6 respostas
M
import java.sql.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class TableDisplay extends JFrame
{
	private Connection connection;
	private JTable table;
	public TableDisplay()
	{
		String url="jdbc:odbc:Books";
		String username="anonymous";
		String password="guest";
		try
		{
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
connection=DriverManager.getConnection(url, username, password);
		}
		catch(ClassNotFoundException cnfex)
		{
			System.err.println("Failed to load JDBC/ODC DRIVER.");
			cnfex.printStackTrace();
			System.exit(1);
		}
		catch(SQLException sqlex)
		{
			System.err.println("UNABLE TO CONNECT");
			sqlex.printStackTrace();
		}
		getTable();
		setSize(450,150);
		show();
	}//fim TableDisplay
	
	private void getTable()
	{
		Statement statement;
		ResultSet resultSet;
		try
		{
			String query="SELECT * FROM Authors";
			statement=connection.createStatement();
			resultSet=statement.executeQuery(query);
			displayResultSet(resultSet);
			statement.close();
		}
		catch(SQLException sqlex)
		{
			sqlex.printStackTrace();
		}
	}//fim private void getTable()
	
	private void displayResultSet(ResultSet rs)	throws SQLException
	{
	[color=red]/*ERRO UNREACHABLE STATEMENT*/[/color]		throw new SQLException();
			boolean moreRecords=rs.next();//first();
 			if(!moreRecords)
 			{
				JOptionPane.showMessageDialog(this, "RESULTSET CONTAINED NO RECORDS");
				setTitle("NO RECORDS TO DISPLAY");
				return;
			}
		setTitle("AUTHORS TABLE FROM BOOKS");
		Vector columnHeads=new Vector();
		Vector rows=new Vector();
		
		try
		{
			ResultSetMetaData rsmd=rs.getMetaData();
		
			for(int i=1;i<=rsmd.getColumnCount(); ++i)
			{
				columnHeads.addElement(rsmd.getColumnName(i));
			}
			do
			{
				rows.addElement(getNextRow(rs, rsmd));
			}while(rs.next());
			table=new JTable(rows, columnHeads);
			JScrollPane scroller=new JScrollPane(table);
			getContentPane().add(scroller, BorderLayout.CENTER);
			validate();
		}
		catch(SQLException sqlex)
		{
			sqlex.printStackTrace();
		}
	}//fim private void displayResultSet(ResultSet rs)
	
private Vector getNextRow(ResultSet rs, ResultSetMetaData rsmd)
throws SQLException
{
[color=darkblue]	/*ERRO UNREACHABLE STATEMENT*/[/color]	throw new SQLException();	
			Vector currentRow=new Vector();
			for(int i=1; i<=rsmd.getColumnCount(); ++i)
			{
				switch(rsmd.getColumnType(i))
				{
					case Types.VARCHAR:
					currentRow.addElement(rs.getString(i));
					break;
					
					case Types.INTEGER:
					currentRow.addElement(new Long(rs.getLong(i)));
					break;
					
					default:
					System.out.println("TYPE WAS: "+rsmd.getColumnTypeName(i));
				}
			}
				return currentRow;
	}//fim private Vector getNextRow(ResultSet rs, ResultSetMetaData rsmd)

	public void shutDown()
	{
		try
		{
			connection.close();
		}
		catch(SQLException sqlex)
		{
			System.err.println("UNABLE TO DISCONNECT");
			sqlex.printStackTrace();
		}
	}//fim public void shutDown()
	
		public static void main(String args[])
		{
			final TableDisplay app=new TableDisplay();
			app.addWindowListener(new WindowAdapter()
			{
				public void windowClosing(WindowEvent e)
				{
					app.shutDown();
					System.exit(0);
				}
			} );
		}
}//fim da classe

6 Respostas

Rafael_Steil

Cara, se vc nao colocar sobre o que eh a mensagem no campo “Assunto” e nao disser o que esta errado, ninguem ira lhe ajudar. Jogar um monte de codigo sem sentido e esperar que alguem faca magina nao costuma render muitos frutos.

Rafael

furutani

É o que o Rafael disse, não vai te ajudar em nada fazer um post desse sem descrever o que esta acontecendo, o que voce tentou fazer, o erro que dá.

Sami_Koivu

Eles tem razão. Pessoalmente acho que nós que pedimos ajuda de outros temos mais ou menos a responsabilidade de facilitar o trabalho daqueles que nós ajudem tanto como for possível.

Quanto ao erro “Unreachable statement” o compilador java é tão esperto, que vê que a primeira coisa que aqueles dois metodos fazem é jogar uma exceção. Sem condições. E depois da primeira linha vem código que nunca, em nenhuma condição vai executar pois sempre vai ser jogado aquela exceção. Aí a compilador pensa: “Puxa… isso não faz sentido… será que ele quer isso mesmo? Melhor avisar ele que aquilo não faz sentido.”

Então… se você quer mesmo jogar aquela exceção tem que comentar aquele código “morto” que nunca vai ser executado.

Abraços,
Sami

M

Obrigado até então pelas ajudas, porém não posso ficar incólume às palavras dos “EXPERTS” que aqui digitam suas idéias. Infelizmente brasileiro além de ter um mau praxe em costumes, mas também a ironia o compõe. Aos desavisados só posso pedir desculpas, mesmo porque e infelizmente não nasci sabendo java como todos vós, isso sem falar a ansiedade e o nervosismo de tentar aprender algo no braço, na marra.

Tentarei hoje a noite comentar o código em questão e até a próxima.

Obrigado.

Carlos.

Rafael_Steil

Nao eh questao de nascer sabendo ou nao, eh pura e simplesmente questao de bom senso. Se voce nao disser o que da errado, como espera que alguem lhe ajude?

Rafael

Sami_Koivu

Opaaa Carlos, espero que você não está se referindo à minha explicação. Só tentei uma narrativa interessante, querendo não somente te informar qual é o erro, mas também porque é que o compilador te avisa desse tipo de código. Mas infelizmente, sendo um estrangeiro, ás vezes eu me expresso mal. Eu peço sinceramente desculpas se isso foi o caso.

Seria perfeitamente possível escrever um compilador que compilasse seu código como não há problema de sintaxe nem ambiguidade. A função de esse tipo de mensagem de erro, eu acho, é só para evitar erros lógicos que são muito difíceis de encontrar. Por exemplo, se você tivesse colocado aquele “throw new SQLException();” aí meio… sem querer… você poderia gastar muito tempo em tentar descobrir porque é que o resto do metodo nunca vai executando.

Sobre a questão de colocar um assunto bom:

Eu, por exemplo, só conheço bem assuntos de J2SE. Sei que não vou poder ajudar muita gente com problemas de WebLogic, Hibernate, Struts ou bancos de dados. Tampouco tenho o tempo suficiente para ver todos os posts. Assim, sempre quando tenho tempo vejo a parte “Tópicos Recentes” procurando tópicos sobre quais tenho pelo menos um pouco de conhecimento. Se o tópico é “Outro erro. Alguém ajuda?” ou “Socorro!” não tenho como saber qual é o assunto, e provavelmente nem vou entrar para ler o post.

Talvez seu post levou mais crítica do que merece. Realmente, eu acho que tudo que queremos comunicar é que com um tópico mais específico e uma descrição mais detalhada da sua dúvida fica mais fácil ajudar você. :smiley:

Abraços,
Sami

Criado 15 de junho de 2005
Ultima resposta 17 de jun. de 2005
Respostas 6
Participantes 4