Ajuda com o jsp

Olá pessoal,

estou tentando realizar um select com um scriplet porem nao estou conseguindo, da uma olhada nos arquivos:

Tenho minha classe de conexao e consulta

Conexao.java


//conexao com o mysql

[code]public Conexao() {

  try {   

     Class.forName("org.gjt.mm.mysql.Driver");   
     con = DriverManager.getConnection("jdbc:mysql://localhost:3306/projeto/","root","senha");   
     stm = con.createStatement();   

  } catch (Exception e) {   
     System.out.println("não foi possível conectar ao banco" + e.getMessage());   
  }   

} [/code]

//meu metodo de consulta

[code]public void setConsulta() {

  try {   
     res = stm.executeQuery("select * from usuarios");   
  }   
  catch (SQLException e){   
     e.printStackTrace();   
  }   

}

public ResultSet getResultado() {
return res;
}
}

//conexao com o mysql
public Conexao() {

  try {

     Class.forName("org.gjt.mm.mysql.Driver");
     con = DriverManager.getConnection("jdbc:mysql://localhost:3306/projeto/","root","senha");
     stm = con.createStatement();

  } catch (Exception e) {
     System.out.println("não foi possível conectar ao banco" + e.getMessage());
  }

}[/code]

//meu metodo de consulta

[code]public void setConsulta() {

  try {
     res = stm.executeQuery("select * from usuarios");
  }
  catch (SQLException e){
     e.printStackTrace();
  }

}

public ResultSet getResultado() {
return res;
}
}[/code]

agora o jsp que esta fazendo a chamada desse metodo:
listar.jsp

[code]
try {

 con.setConsulta();   
 ResultSet temp = con.getResultado();   
      
  while (temp.next()){   
  %>   
  <tr>   
      <td width=200>   
           <%out.println(temp.getString("nome"));%>   
     </td>   
      <td width=50>   
           <%out.print(temp.getString("usuario"));%>   
     </td>   
      <td width=30>   
           <%out.print(temp.getString("senha"));%>   
     </td>   
  </tr>   
<%}   

}catch (Exception e) {
out.println("Não foi possivel realizar a listagem: "+ e.getMessage());
}

%>
try {

 con.setConsulta();
 ResultSet temp = con.getResultado();
   
  while (temp.next()){
  %>
  <tr>
      <td width=200>
           <%out.println(temp.getString("nome"));%>
     </td>
      <td width=50>
           <%out.print(temp.getString("usuario"));%>
     </td>
      <td width=30>
           <%out.print(temp.getString("senha"));%>
     </td>
  </tr>
<%}

}catch (Exception e) {
out.println("Não foi possivel realizar a listagem: "+ e.getMessage());
}

%>[/code]
só que quando eh executado ela nao traz nenhum informação, alguem poderia me explicar o que pode estar acontecendo?

vlw…

Cara, eu não tenho certeza se isso é um bug (muito horrível, pq persiste durante várias versões!!!) ou uma característica dos scriptlets. Eu já tive o mesmo problema que tu. A resolução? Não intercalar código HTML com comandos nos scriptlets diretamente, como tu fizeste no loop:

       while (temp.next()){
       %>
       <tr>
           <td width=200>
                <%out.println(temp.getString("nome"));%>
          </td>
           <td width=50>
                <%out.print(temp.getString("usuario"));%>
          </td>
           <td width=30>
                <%out.print(temp.getString("senha"));%>
          </td>
       </tr>
     <%}

Tente usar o out.print para todas as linhas, inclusive pra isso:

out.print("</td>");

Ou seja, código para imprimir todas as linhas onde haja impressão dinâmica de conteúdo.

Puts que mals heim…

Mas brother valew pela ajuda vou tentar utilizar desta maneita qlqr coisa dou outro post… flw abçs

Puts, msm colcando dessa forma que vc me passou ainda nao funcionou…

acho que vou ter que desenvolver algum servlets para fazer isso…

mas se alguem ainda souber posta aeee…

vlw…

Cara, é muito provável que haja algum erro de lógica ou alguma coisa em alguma parte do código, seja em conexão com banco de dados ou outra coisa. O problema é que tu estás mandando todas as excesões para o printStackTrace() ou System.out. Acontece que esses métodos e objetos rodam no prompt no console, então as mensagens são enviadas para o mesmo, e não para a tela.

Tu podes fazer duas coisas para procurar e detectar onde está o erro. Uma opção é mais rápida pórém servirá só para esta resolução. A outra solução é um pouquinho mais demorada porém será melhor aproveitada agora e futuramente.

A primeira solução: crie uma classe similar ao teu list.jsp que deve rodar o mesmo código (mas sem as tags HTML) para rodar no prompt do Windows. Posteriormente, rodando esta classe no prompt do Windows, você terá todas as mensagens emitidas pelas classes (incluindo os erros!), e aí sim poderá detectar onde está o erro.

A segunda solução: coloquei cláusulas throws nos teus contrutores e métodos que podem eventualmente liberar excessões. Então, na tua página JSP, coloque o seguinte atributo na tua psge:

<%@ page errorPage="error.jsp" %>

E no arquivo error.jsp você põe o seguinte código:

<%@ pahe isErrorPage="true" %>

<%= e.getClass.getCanonicalName() %>
<br>
<%= e.getMessage() %>

Pronto, agora rode a tua página list.jsp. Caso ocorra alguma excessão (o que é muito provável), a excessão causada será redirecionada para a página error.jsp e esta, por sua vez, irá “imprimir” na tela a classe da excessão (IOException, SQLException, SQLException, etc) e qual a mensagem que a excessão possui (se possuir).

Perceba que a primeira solução pode até ser mais rápida, mas ela só te ajudará nesse caso. Usando a segunda alternativa de criar a página de erro, caso futuramente tu tenhas problemas com o banco de dados ou qualquer coisa com o servidor e afins, o erro será impresso na tela e será mais fácil saber qual o erro lançado e possivelmente o porquê de estar ocorrendo.

Depois posta ae no que deu, flws.

Ow blz,

vou tentar das duas maneiras para ver o que esta acontecendo… mas ta dificil rsrs… irmao valeu pela ajuda…obrigado mesmo…

flw t+

Olá novamente,

cara o que foi passado ate agora consegui corrigir o erro, fiz a classe roda sem problemas da seguiente maneira


package conexao;
/**
 * @(#)teste.java
 *
 *
 * @author 
 * @version 1.00 2007/1/12
 */
import java.sql.*;
import conexao.Conexao;


public class Teste {
	public static void main (String[] args){
		Conexao con = new Conexao();	
    	try{
    		
	    	con.setConsulta();
	        ResultSet temp = con.getResultado();
        
         	while (temp.next()){
	       		System.out.print(temp.getString("nome"));
	            System.out.print(temp.getString("usuario"));
	            System.out.print(temp.getString("senha"));
	                       }
		}catch(Exception e){
      	System.out.println("Não foi possivel realizar a listagem: "+ e.getMessage());    
   	  	}  	
	}
	
} 
    

acrecentando apenas

Conexao con = new Conexao();

funcionou corretamente… mas e agora? nao posso utilizar dessa maneira no jsp ok? tenho que utilizar alguma bean? como posso escrever isso no jsp? pois agora sei que os metodos con.setConsulta() e ResultSet temp = con.getResultado(); nao esta sendo localizados pela jsp…

vlw mais uma vez…

Thiago, dah uma lidinha nessa apostila aqui que suas dúvidas serão sanadas:
http://www.caelum.com.br/caelum/curso-21.jsp
É só fazer o download!!!

Altamente recomendável ler a apostila como o usuário acima citou. Respondendo a tua pergunta: sim, use preferencialmente um bean. &lt;jsp:useBean id="con" scope="page" class="seupacote.Conexao"&gt;