Resolvido (ViniGodoY) Vetor não tras os dados

9 respostas
alexlima72

Olá Pessoal,

Eu estou tentando gerar uma consulta de dados de uma tabela (Oracle) usando Vector por isso peguei um exemplo simples feito pelo Prof em Sala de Aula mas não tras os dados…
Estou usando o Eclipse + TomCat + Beans
Não está dando erro de compilação mas não tras nada

Segue metodo vector mas sem os get & set dos campos BD pois isso é Básico::::

public Vector<Turno> getLista() {
		Vector<Turno> a = new Vector<Turno> ();
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
		} catch (Exception e) {
			//a "Driver não Instalado";
		}
		
		try {
			Connection conexao = DriverManager.getConnection("jdbc:oracle:thin:sugartst/sugartst@sugar:1521:sugar");
			PreparedStatement sql = conexao.prepareStatement("select leo_dtturno, leo_hrturno, leo_dtreal from leo_una_turno ");
			ResultSet rs=sql.executeQuery();

			while (rs.next()){
				Turno trn = new Turno ();
				trn.leo_dtturno = rs.getString(leo_dtturno);
				trn.leo_hrturno = rs.getString(leo_hrturno);
				trn.leo_dtreal = rs.getString(leo_dtreal);
				a.add(trn);
			}
			rs.close();
			conexao.close();
		} catch (SQLException e){
			
		}
	
		return a;
	}

Segue a Pagina JSP:::

<table border="1" width="120%">
		<tr>
			<td>- Data do Turno -</td>
			<td>- Horário do turno -</td>
			<td>- Data da Abertura -</td>
		</tr>
	</table>		
		
	<table border="1" width="120%">
<% //// Montar Vetor para listar Consulta   /////////////////////////////
Turno turno = new Turno ();
Vector Lista = turno.getLista();
for (int i = 0; i < Lista.size(); i++){
	Turno trn = (Turno)Lista.get(i);
    %>	
	<tr>
		<td><%=trn.getLeo_dtturno() %>			</td>
		<td><%=trn.getLeo_hrturno() %>			</td>
		<td><%=trn.getLeo_dtreal() %>			</td>				
	</tr> 
<%
}
%>

Agradeço a quem possa me ajudar

9 Respostas

alexlima72

Pessoal dá uma força ai…

G

Olá alexlima72,
Altere o seguinte trecho de código…
de:

while (rs.next()){  
       Turno trn = new Turno ();  
        trn.leo_dtturno = rs.getString(leo_dtturno);  
        trn.leo_hrturno = rs.getString(leo_hrturno);  
        trn.leo_dtreal = rs.getString(leo_dtreal);  
       a.add(trn);  
   }

para:

Turno trn;
while (rs.next()){  
        trn = new Turno ();  
        trn.leo_dtturno = rs.getString(leo_dtturno);  
        trn.leo_hrturno = rs.getString(leo_hrturno);  
        trn.leo_dtreal = rs.getString(leo_dtreal);  
       a.add(trn);  
   }

Assim você mantem uma única referência a seu objeto turno. Qualquer coisa post o erro ok?
Espero ter ajudado…
[]'s

alexlima72

Oi Gilson

Já melhorou…está trazendo a segunda table porém com os couchetes do vetor em vazio [] antes não estava trazendo nem a segunda tabela…acho q estamos no caminho…

Agradeço desde já o interesse…

alexlima72

Pessoal…alguem mais teria a boa vontade…

ViniGodoy
  1. Em primeiro lugar, não use Vector, prefira o ArrayList:
    http://www.guj.com.br/posts/list/74068.java#389435

O Vector é uma classe obsoleta e não deveria ser usado desde o Java 1.2.
Existe uma lista com mais vantagens no link acima.

  1. Use o conexao.close() no seu finally. Assim você garante que a conexão será fechada. É sempre bom fechar resultsets e conexões no finally, ou usar um framework como o spring, que se encarrega disso para você.

  2. Se você está usando Java 5 ou superior, use o for each ao invés do for normal quando possível. Ou seja, ao invés de:

for (int i = 0; i &lt; Lista.size(); i++){ Turno trn = (Turno)Lista.get(i);

Use:

for (Turno trn : lista){

  1. De que segunda tabela você está falando? O código que você mostra só carrega uma única tabela.
alexlima72

Olá ViniGogoi,
Obrigado pela ajuda…
Então, desculpe pela falta de informação. É q coloquei uma table(html) de cabeçalho com os nomes das colunas no BD e não coloquei o codigo dela…
A segunda Table é o Vector abaixo que me mostra porém [] os couchetes vazios devido a eu chamar o Bean antes do Vector

Eu queria listar uma tabela do BD só isso…eu já consigo incluir,excluir e alterar pelo JavaBean usando o Eclipse e beleza
mas para listar o BD pelo JavaBean a unica maneira q achei um exemplo foi usando Vector, então fiz um e não deu erro mas não trouxe nada…

Pag. JSP

<table border="1" width="120%">

	<jsp:getProperty name="Turno" property="lista"  />	
<% //// Montar Vetor para listar Consulta   /////////////////////////////
Turno turno = new Turno ();
Vector Lista = turno.getLista();
for (int i = 0; i < Lista.size(); i++){
	Turno trn = (Turno)Lista.get(i);
    %>	
	<tr>
		<td><%=trn.getLeo_dtturno() %>			</td>
		<td><%=trn.getLeo_hrturno() %>			</td>
		<td><%=trn.getLeo_dtreal() %>			</td>				
	</tr> 
<%
}
%>

	</table>

Classe Turno

public Vector<Turno> getLista() {
		Vector<Turno> a = new Vector<Turno> ();
try {
			Connection conexao = DriverManager.getConnection("jdbc:oracle:thin:sugartst/sugartst@sugar:1521:sugar");
			PreparedStatement sql = conexao.prepareStatement("select leo_dtturno, leo_hrturno, leo_dtreal from leo_una_turno ");
			
			ResultSet rs=sql.executeQuery();
			Turno trn;
			while (rs.next()){
				trn = new Turno ();     
				trn.leo_dtturno = rs.getString(leo_dtturno);
				trn.leo_hrturno = rs.getString(leo_hrturno);
				trn.leo_dtreal = rs.getString(leo_dtreal);
				a.add(trn);
			}
			rs.close();
			conexao.close();//eu  fechando a conexao aqui, precisa ser no Finnaly tem mesmo q cria-lo??
		} catch (SQLException e){
			
		}
	
		return a;
	}

Os geters e setters estão criados como Strings ma não coloquei aqui…

Agradeço desde já…

ViniGodoy
public List&lt;Turno&gt; getLista() {
    try {
        Connection conexao = null;
        PreparedStatement sql = null;
        ResultSet rs = null;
        
        try {
            conexao = DriverManager.getConnection("jdbc:oracle:thin:sugartst/sugartst@sugar:1521:sugar");
            sql = conexao.prepareStatement("select leo_dtturno, leo_hrturno, leo_dtreal from leo_una_turno ");
            rs = sql.executeQuery();

            List&lt;Turno&gt; a = new ArrayList&lt;Turno&gt;();
            while (rs.next()) {
                Turno trn = new Turno();
                trn.leo_dtturno = rs.getString("leo_dtturno");
                trn.leo_hrturno = rs.getString("leo_hrturno");
                trn.leo_dtreal = rs.getString("leo_dtreal");
                a.add(trn);
            }
            return a;
        }
        finally { //Sim, tem que cria-lo.
            if (rs != null)
                rs.close();
            if (sql != null)
                sql.close();
            if (conexao != null)
                conexao.close();                               
        }
    }
    catch (SQLException e) {
        throw new RuntimeException(e);
    }
}

Tem que criar o finally sim. É a única maneira de você garantir que a conexão, o statement e o resultset serão fechados, mesmo caso uma exceção aconteça. Também não é uma boa ignorar exceções, como você está fazendo no "catch SQLException". Se estiver acontecendo um erro naquele seu código, esse erro será simplesmente apagado pelo seu catch. No lugar disso, transforme sua exceção verificada (SQLException) em um exceção não verificada (RuntimeException).

Também restrinja ao máximo o escopo das suas variáveis. Não tem porque a lista existir fora do try catch, da mesma forma que não tem porque a variável Turno existir fora do while.

Finalmente, você tem certeza que existem dados na tabela para serem preenchidos?

alexlima72

Vini,
Blz estarei fechando minhas conexõs no Finaly então mesmo porq existem muitos usuarios utilizando este BD porém em Delphi e poderei ter problemas de lentidão.
Eu fizda maneira q vc descreve acima troquei o Vector pelo List importe blz e compilou.
na Pag JSP eu só troquei o Vector pelo List e também compilou blz.
Já está listando os dados para mim…esta tabela tem uns 12 registro
Agora vou começar a brincar com as formatações dos campos tipo Date e terminar de inserir o resto dos campos da tabela e colocar clausula where etc…

obrigado pela Força ViniGodoi. vou treinar mais o List agora…

ViniGodoy

Blz! :slight_smile:

Só mais um detalhe… O Godoy do meu nome é com “y”.

Criado 21 de janeiro de 2008
Ultima resposta 22 de jan. de 2008
Respostas 9
Participantes 3