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::::
publicVector<Turno>getLista(){Vector<Turno>a=newVector<Turno>();try{Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();}catch(Exceptione){//a"Driver não Instalado";}try{Connectionconexao=DriverManager.getConnection("jdbc:oracle:thin:sugartst/sugartst@sugar:1521:sugar");PreparedStatementsql=conexao.prepareStatement("select leo_dtturno, leo_hrturno, leo_dtreal from leo_una_turno ");ResultSetrs=sql.executeQuery();while(rs.next()){Turnotrn=newTurno();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(SQLExceptione){}returna;}
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…
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.
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ê.
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 < Lista.size(); i++){
Turno trn = (Turno)Lista.get(i);
Use:
for (Turno trn : lista){
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…
publicVector<Turno>getLista(){Vector<Turno>a=newVector<Turno>();try{Connectionconexao=DriverManager.getConnection("jdbc:oracle:thin:sugartst/sugartst@sugar:1521:sugar");PreparedStatementsql=conexao.prepareStatement("select leo_dtturno, leo_hrturno, leo_dtreal from leo_una_turno ");ResultSetrs=sql.executeQuery();Turnotrn;while(rs.next()){trn=newTurno();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();//eutôfechandoaconexaoaqui,precisasernoFinnalytemmesmoqcria-lo??}catch(SQLExceptione){}returna;}
Os geters e setters estão criados como Strings ma não coloquei aqui…
Agradeço desde já…
ViniGodoy
publicList<Turno>getLista(){try{Connectionconexao=null;PreparedStatementsql=null;ResultSetrs=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<Turno>a=newArrayList<Turno>();while(rs.next()){Turnotrn=newTurno();trn.leo_dtturno=rs.getString("leo_dtturno");trn.leo_hrturno=rs.getString("leo_hrturno");trn.leo_dtreal=rs.getString("leo_dtreal");a.add(trn);}returna;}finally{//Sim,temquecria-lo.if(rs!=null)rs.close();if(sql!=null)sql.close();if(conexao!=null)conexao.close();}}catch(SQLExceptione){thrownewRuntimeException(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!
Só mais um detalhe… O Godoy do meu nome é com “y”.