Conexão JDBC e Postgre + JSP

19 respostas
R

Ola pessoal estou com a seguinte duvida no codigo

<%@ page import="java.sql.*" %> 
<%@ page import="org.postgresql.Driver" %>
<html>
	<head><title>JDBC PostgreSQL - Teste</title></head>
<body>
<%
String url = "jdbc:postgresql://localhost/teste"; //esta correto a url?
String username = "postgres";
String password = "regisclaus";
Class.forName("org.postgresql.Driver").newInstance();
Connection conn = DriverManager.getConnection( url, username, password );
%>
<h3>A conexão ao banco de dados foi bem-sucedida!</h3>
<%
	Statement st = conn.createStatement();
	String sql = "select * from usuario where nome_usu = "+request.getParameter("login");
	ResultSet rs = st.executeQuery(sql);        
	String nome = rs.getString("nome_usu");   
	out.println(nome);
	
	//o select esta correto? o getParameter(login) vem de uma tela login.jsp
%>
</body></html>

1. A URL esta correta? Estou usando Windows + Postgre 8.2 + (Driver JDBC colocado na pasta WebContent/lib do projeto)

2. O codigo do select esta correto?

...

19 Respostas

A

a url nao sei do postgree

comece a usar PreparedStatment no seu codigo

exemplo

String sql = "select * from usuario where nome_usu = ?"; PreparedStatement st = conn.prepareStatement(sql); st.setString(1, request.getParameter("login")); ResultSet rs = st.executeQuery(sql); String nome = rs.getString("nome_usu"); out.println(nome);

S

Comentei dentro do teu código msm. Espero que ajude, se tiver confuso mande a resposta ai.
Ahh, só complementando, concordo com o nosso colega acima.

Espero ajudar.

1. <%@ page import="java.sql.*" %>   
   2. <%@ page import="org.postgresql.Driver" %>  
   3. <html>  
   4.     <head><title>JDBC PostgreSQL - Teste</title></head>  
   5. <body>  
   6. <%  
   7. String url = "jdbc:postgresql://localhost:5432/teste"; //Informe a porta de conexão. Assim você garante todas as informações de conexão.
   8. String username = "postgres";  
   9. String password = "regisclaus";  
  10. Class.forName("org.postgresql.Driver");//Não precisa chamar o método newInstance, basta assim como coloquei.
  11. Connection conn = DriverManager.getConnection( url, username, password );
  12. %>  
  13. <h3>A conexão ao banco de dados foi bem-sucedida!</h3>  
  14. <%  
  15.     Statement st = conn.createStatement();  
  16.     String sql = "select * from usuario where nome_usu = '"+request.getParameter("login")+"'";//Uma string em sql deve-se colocar entre aspas.
  17.     ResultSet rs = st.executeQuery(sql); 
            rs.next(); //Esta linha estava faltando para você pegar o resultado da tua consulta
  18.     String nome = rs.getString("nome_usu");
  19.     out.println(nome);
  20.       
  21.     //o select esta correto? o getParameter(login) vem de uma tela login.jsp  
  22. %>  
  23. </body></html>
B

Uma dica Regis

procure não colocar muitos scriplets na página JSP.
seria melhor vc criar um objeto de conexção que será quem vai conectar co o banco.
daí, atraves dele, vc irá acessar o método de busca e atualização.

fazendo do jeito q vc está fazendo, fica mto bagunçado o código!

abraços

R

em um JSP nem Statement nem PreparedStatement, o correto é JSTL

R

O que é JSTL?

R

Fiz as mudanças como o "saninaimayer " e "Anderson Leite " e ficou assim:

<%@ page import="java.sql.*" %> 
<%@ page import="org.postgresql.Driver" %>
<html>
	<head><title>JDBC PostgreSQL - Teste</title></head>
<body>
<%
String url = "jdbc:postgresql://localhost:5432/teste";
String username = "postgres";
String password = "regisclaus";
Class.forName("org.postgresql.Driver");
Connection conn = DriverManager.getConnection( url, username, password );
%>
<h3>A conexão ao banco de dados foi bem-sucedida!</h3>
<%
	String sql = "select * from usuario where nome_usu = ?";     
	PreparedStatement st = conn.prepareStatement(sql);     
	st.setString(1, request.getParameter("login"));   
	ResultSet rs = st.executeQuery(sql); 
                rs.next();
	String nome = rs.getString("nome_usu");   
	out.println(nome);
%>
</body></html>

O erro na pagina que mostra fala da linha:

ResultSet rs = st.executeQuery(sql);

Então ainda dando erro, seria alguma configuração do Apache ou do TomCat? Algum tutorial, dica de como acertar isso?

E " berg.pb ": Eu entendo essa dica, por enquanto estou sendo mais objetivo na conexão e na seleção mesmo

...

R

what is JSTL
http://java.sun.com/products/jsp/jstl/

S

Você pode postar o erro que está dando?

Aguardo.

R

Seria por um try e catch no getConnection ?

S

Esse detalhe ai é importante :lol:

try {
   ...
} catch(SQLException erro) {

}
R

<% String url = "jdbc:postgresql://localhost:5432/teste"; String username = "postgres"; String password = "regisclaus"; try{ Class.forName("org.postgresql.Driver"); Connection conn = DriverManager.getConnection( url, username, password ); String sql = "select * from usuario where nome_usu = ?"; PreparedStatement st = conn.prepareStatement(sql); st.setString(1, request.getParameter("login")); ResultSet rs = st.executeQuery(sql); rs.next(); String nome = rs.getString("nome_usu"); out.println(nome); }catch(SQLException e){ e.printStackTrace(); out.println("Não conectado"); } %>

Bem deixei o codigo assim e só ta entrando no catch escrevendo “Não conectado”

Algum erro no Try?

Conexão errada? Select errado? Codigo errado? Postgre e Apache roando normal (testei com outro jsp:

try{ Class.forName("org.postgresql.Driver"); Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/teste","postgres","regisclaus"); out.println("----Conectado-----"); con.close(); }catch(SQLException e){ e.printStackTrace(); out.println("Não conectado"); }

S

Cara ainda estah faltando um catch que 'e referente a linha 6 do teu codigo ( Class.forName(“org.postgresql.Driver”); ). Voce precisa tratar assim:

try {
     ...
} catch (ClassNotFoundException ex) { // Referente a linha 6 relatada acima.
      ...
} catch (SQLException ex) {
      ...
}

Agora cara, tem ambientes de desenvolvimento em java que te ajudam e muito nesses erros bestas como por exemplo o netbeans e o Eclipse. Eu uso e aconcelho o netbeans mas eh coisa de preferencia.

Flw.

R

Meu código esta assim:

<% String url = "jdbc:postgresql://localhost:5432/teste"; String username = "postgres"; String password = "regisclaus"; try{ Class.forName("org.postgresql.Driver"); Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/teste","postgres","regisclaus"); String sql = "select * from usuario where nome_usu = ?"; PreparedStatement st = conn.prepareStatement(sql); out.println("Prepared: OK\n"); st.setString(1, "Regis"); out.println("Set - OK\n"); ResultSet rs = st.executeQuery(sql); out.println("Execute - OK"); while (rs.next()){ String nome = rs.getString("nome_usu"); out.println(nome); } rs.close(); conn.close(); } catch (ClassNotFoundException ex){ out.println("Classe não encontrada"); } catch(SQLException e){ e.printStackTrace(); out.println("Não conectado"); } %>

A classe e a conexão estão ok.

Como podem ver, coloquei uns println para verificar até onde vai a busca.

O erro esta no “ResultSet rs = st.executeQuery(sql);”

Os dados para a seleção estão ok, esta cadastrado corretamente o nome_usu com “Regis”.

Qual seria possivel problema?

Nossa estou precisando realmente resolver esse problema.

I

Coloca a stack de erro ai.
Cara isso não é profissional né? Tipo isso é um trabalho de facul ou alguma brincadeira, pq não se coloca sql no jsp. Assim vc esta o usando o anti Pattern Lone Wolf, que consiste em fazer tudo em só lugar.

R

Coloca a stack de erro ai.
Cara isso não é profissional né? Tipo isso é um trabalho de facul ou alguma brincadeira, pq não se coloca sql no jsp. Assim vc esta o usando o anti Pattern Lone Wolf, que consiste em fazer tudo em só lugar.

Não esta dando Stack de erro. Esta simplesmente entrando no catch (SQLException)

A pagina que gera é isso:

"Prepared: OK Set - OK Não conectado "

E sim é coisa apenas de teste, eu sei de tudo isso, encapisulamento, e blá blá blá. Só quero consiguir fazer aparecer o BENDITO “Regis” do select.

I

Não está sendo possível se conectar no banco, tenta tirar a porta ou mudar um pouco aquela string de conexão.
aqui tem dois links:
http://www.faqs.org/docs/ppbook/x20856.htm
http://www.javafree.org/javabb/viewtopic.jbb?t=854601

R

Modificação no código:

<% String url = "jdbc:postgresql://localhost:5432/teste"; String username = "postgres"; String password = "regisclaus"; try{ Class.forName("org.postgresql.Driver"); } catch (ClassNotFoundException ex){ out.println("Classe não encontrada"); } Connection conn = null; try{ conn = DriverManager.getConnection("jdbc:postgresql://localhost:5432/teste","postgres","regisclaus"); } catch(SQLException e){ e.printStackTrace(); out.println("Não conectado"); } String sql = "select * from usuario where nome_usu = ?"; PreparedStatement st = conn.prepareStatement(sql); out.println("Prepared: OK"); st.setString(1, "Regis"); out.println("Set - OK"); ResultSet rs = st.executeQuery(sql); out.println("Execute - OK"); while (rs.next()){ String nome = rs.getString("nome_usu"); out.println(nome); } rs.close(); conn.close(); %>


Erro:

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: An exception occurred processing JSP page /postgre.jsp at line 29

26: 		out.println(Prepared: OK);

27: 		st.setString(1, Regis);

28: 		out.println(Set - OK);

29: 		ResultSet rs = st.executeQuery(sql);

30: 		out.println(Execute - OK);

31: 		while (rs.next()){

32: 			String nome = rs.getString(nome_usu);
Stacktrace:

org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)

javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Conexão com o banco num esta ok mesmo?

I

Erro esquisito, tu tá tentado mostrar relatórios com o jasper reports?
Cara tenta colocar esse código em um método main, tira do jsp, se funcionar no main ai tu coloca no jsp.

R

Boa ideia da Main

Vou testar e te mando resposta :smiley:

Criado 28 de agosto de 2008
Ultima resposta 3 de set. de 2008
Respostas 19
Participantes 6