Conexão (postgre) retornando "null"

17 respostas
G

Bom dia pessoal, estou com o seguinte problema: estou desenvolvendo um sistema web (jsp), e quando tento cadastrar alguém está retornando null (quando testo depurando e parando ele aqui User user = new User(); ).
Eu dividi os pacotes usuario e bd. Segue os códigos:

Cadastro (jsp)

<%@page import="pac_user.User"%>
<%@page import="java.sql.Connection"%>
<%@page import="pac_bd.Bd"%>
<%@page import="pac_sistema.Security"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <%
            String name= request.getParameter("name");
            String lastname= request.getParameter("lastname");
            String email = request.getParameter("email");
            String login = request.getParameter("login");
            String passw= request.getParameter("passw");
            String passw2 = request.getParameter("passw2");
            if (("".equalsIgnoreCase(name))||("".equalsIgnoreCase(lastname))||("".equalsIgnoreCase(email)) 
                    ||("".equalsIgnoreCase(login))|| ("".equalsIgnoreCase(passw))
                    ||("".equalsIgnoreCase(passw2))){
                response.sendRedirect("Cadastrando.jsp");
            } else if (passw.equals(passw2)) {
                Security criptografar = new Security();
                String newPassw = criptografar.criptografia(passw);

                Bd conn = new Bd();
                Connection con = conn.abrir();

                User user = new User();
                user.insert(user, con);

                response.sendRedirect("Confirmando_Cadastro.jsp");
                conn.fechar();
            } else {
                out.println("Houve algum erro!<br/>Tente novamente.");

            }
        %>
    </body>
</html>

Classe do Banco de dados(do pacote bd):

import java.sql.Connection;
import java.sql.DriverManager;

public class Bd {

    private Connection con;

    public Connection getConexao() {
        return con;
    }

    public Connection abrir() {
        String bd = "jdbc:postgresql://localhost:5432/postgres";
        try {
            Class.forName("org.postgresql.Driver");
            con = DriverManager.getConnection(bd, "postgres", "");
        } catch (SQLException s) {
            System.out.println("Erro SQL: " + s.toString() + " "
                    + s.getErrorCode() + " " + s.getSQLState());
        } catch (Exception e) {
            System.out.println("Erro: " + e.toString()
                    + e.getMessage());
        }
        return con;
    }

    public void fechar() throws SQLException {
        con.close();

    }
}

Classe do usuario do pacote user)

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;

/**
 *
 * @author Gabi
 */
public class User {
    private int id;
    private String name;
    private String lastname;
    private String email;
    private String login;
    private String passw;
    
    public int getId(){
        return id;
    }
    public String getName() {
    	    return name;
    }
    public void setName(String name) {
        this.name= name;
    }
    
    public String getLastname(){
        return lastname;
    }
    public void setLastname(String lastname){
        this.lastname= lastname;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }

    public String getLogin() {
        return login;
    }
    public void setLogin(String login) {
        this.login = login;
    }

    public String getPassw() {
        return passw;
    }
    public void setPassw(String passw) {
        this.passw= passw;
    }
    
       public void inserir (User user,Connection con){
        try {              
            Statement conf = con.createStatement();
            StringBuffer bd = new StringBuffer("INSERT INTO user (name, lastname, email, login, passw)"
                    + "VALUES('" + user.name + "', '" + user.lastname+ "', '" + user.email + "', '" 
                    + user.login + "', '" + user.passw+ "');");
            conf.execute(bd.toString());
            con.close();
            conf.close();
        } catch (SQLException ex) {
            System.out.println("ERROR!\n\nErro ao cadastrar dados!" + ex);
        }
    }
}

erro do glassfish:

Listening for transport dt_socket at address: 9009
11/10/2011 08:41:25 com.sun.enterprise.glassfish.bootstrap.ASMain main
INFO: Launching GlassFish on Felix platform
Welcome to Felix

INFO: Perform lazy SSL initialization for the listener http-listener-2

INFO: Starting Grizzly Framework 1.9.18-o - Tue Oct 11 08:41:39 BRT 2011

INFO: Starting Grizzly Framework 1.9.18-o - Tue Oct 11 08:41:39 BRT 2011

INFO: Grizzly Framework 1.9.18-o started in: 417ms listening on port 8181

INFO: Grizzly Framework 1.9.18-o started in: 343ms listening on port 3700

INFO: Grizzly Framework 1.9.18-o started in: 448ms listening on port 8080

INFO: Grizzly Framework 1.9.18-o started in: 386ms listening on port 4848

INFO: Grizzly Framework 1.9.18-o started in: 311ms listening on port 7676

INFO: Using com.sun.enterprise.transaction.jts.JavaEETransactionManagerJTSDelegate as the delegate

INFO: SEC1002: Security Manager is OFF.

INFO: Security startup service called

INFO: SEC1143: Loading policy provider com.sun.enterprise.security.provider.PolicyWrapper.

INFO: Realm admin-realm of classtype com.sun.enterprise.security.auth.realm.file.FileRealm successfully created.

INFO: Realm file of classtype com.sun.enterprise.security.auth.realm.file.FileRealm successfully created.

INFO: Realm certificate of classtype com.sun.enterprise.security.auth.realm.certificate.CertificateRealm successfully created.

INFO: Security service(s) started successfully

INFO: Created HTTP listener http-listener-1 on port 8080

INFO: Created HTTP listener http-listener-2 on port 8181

INFO: Created HTTP listener admin-listener on port 4848

INFO: Created virtual server server

INFO: Created virtual server __asadmin

INFO: Virtual server server loaded system default web module

INFO: Loading application MoneyWeb at /MoneyWeb

INFO: Loading MoneyWeb Application done is 6197 ms

INFO: GlassFish Server Open Source Edition 3.0.1 (22) startup time : Felix(12870ms) startup services(8288ms) total(21158ms)

INFO: Binding RMI port to *:8686

INFO: Hibernate Validator bean-validator-3.0-JBoss-4.0.2

INFO: Instantiated an instance of org.hibernate.validator.engine.resolver.JPATraversableResolver.

INFO: JMXStartupService: Started JMXConnector, JMXService URL = service:jmx:rmi://Gabi-PC:8686/jndi/rmi://Gabi-PC:8686/jmxrmi

INFO: Created HTTP listener http-listener-1 on port 8080

INFO: Grizzly Framework 1.9.18-o started in: 18ms listening on port 8080

INFO: Perform lazy SSL initialization for the listener http-listener-2

INFO: Created HTTP listener http-listener-2 on port 8181

INFO: Grizzly Framework 1.9.18-o started in: 8ms listening on port 8181

INFO: [Thread[GlassFish Kernel Main Thread,5,main]] started

INFO: {felix.fileinstall.poll (ms) = 5000, felix.fileinstall.dir = C:\Users\Gabi\GlassFish_Server\glassfish\modules\autostart, felix.fileinstall.debug = 1, felix.fileinstall.bundles.new.start = true, felix.fileinstall.tmpdir = C:\Users\Gabi\AppData\Local\Temp\fileinstall660025937005803222, felix.fileinstall.filter = null}

INFO: {felix.fileinstall.poll (ms) = 5000, felix.fileinstall.dir = C:\Users\Gabi\GlassFish_Server\glassfish\domains\domain1\autodeploy\bundles, felix.fileinstall.debug = 1, felix.fileinstall.bundles.new.start = true, felix.fileinstall.tmpdir = C:\Users\Gabi\AppData\Local\Temp\fileinstall-514853174486832906, felix.fileinstall.filter = null}

INFO: Started bundle: file:/C:/Users/Gabi/GlassFish_Server/glassfish/modules/autostart/org.apache.felix.scr.jar

INFO: Updating configuration from org.apache.felix.fileinstall-autodeploy-bundles.cfg

INFO: Installed C:\Users\Gabi\GlassFish_Server\glassfish\modules\autostart\org.apache.felix.fileinstall-autodeploy-bundles.cfg

INFO: {felix.fileinstall.poll (ms) = 5000, felix.fileinstall.dir = C:\Users\Gabi\GlassFish_Server\glassfish\domains\domain1\autodeploy\bundles, felix.fileinstall.debug = 1, felix.fileinstall.bundles.new.start = true, felix.fileinstall.tmpdir = C:\Users\Gabi\AppData\Local\Temp\fileinstall3527518020024565788, felix.fileinstall.filter = null}

INFO: Loading application MoneyWeb at /MoneyWeb

INFO: MoneyWeb was successfully deployed in 790 milliseconds.

Listening for transport dt_socket at address: 9009

INFO: Loading application MoneyWeb at /MoneyWeb

INFO: MoneyWeb was successfully deployed in 843 milliseconds.

Listening for transport dt_socket at address: 9009

INFO: Erro: java.lang.ClassNotFoundException: org.postgresql.Driverorg.postgresql.Driver

AVISO: StandardWrapperValve[jsp]: PWC1406: Servlet.service() for servlet jsp threw exception

java.lang.NullPointerException

at pac_user.Usero.inserir(User.java:89)

at org.apache.jsp.Validar_005fCadastro_jsp._jspService(Validar_005fCadastro_jsp.java from :82)

at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)

at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:406)

at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:483)

at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:373)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)

at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)

at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)

at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)

at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)

at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)

at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)

at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)

at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)

at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)

at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)

at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)

at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)

at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)

at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)

at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)

at com.sun.grizzly.ContextTask.run(ContextTask.java:69)

at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)

at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)

at java.lang.Thread.run(Thread.java:662)

INFO: Loading application MoneyWeb at /MoneyWeb
INFO: MoneyWeb was successfully deployed in 484 milliseconds.
INFO: Erro: java.lang.ClassNotFoundException: org.postgresql.Driverorg.postgresql.Driver

17 Respostas

AndyRamos

Oi !

Bom dia !

Está certo mesmo sua senha de acesso do usuário postgres vir em branco ?!

con = DriverManager.getConnection(bd, "postgres", "");

Dá uma verificada nisso e se for necessário, ajudaremos em mais alguma coisa.

Saúde e paz à todos !

Anderson Ramos

G

Bom está certo, eu não coloquei senha nele…

Vinny

Opa blz,

Pelo mensagem de erro, o problema está occorendo na linha 89 da sua classe User.java, não sei, o que tem nessa linha, mas talvez o problema não seja na conexão com seu banco, pode ser algum objeto que vc não instanciou, ou alguma conversão com valor null.

Bom mas para ter certeza se é a conexão ou não, dentro do método de conexão coloca um JOptionPane.showMessageDialog(), mostrando o status da sua conexão.

depois das linhas

Class.forName("org.postgresql.Driver"); con = DriverManager.getConnection(bd, "postgres", "");

coloca:

JOptionPane.showMessagemDialog(null, "Estado da conexão: "+con==null);

Se der False é pq sua conexão está ok, e o problema é outra coisa.

G

na linha 89

Statement conf = con.createStatement();

CharlesAlves

Gabi só uma coisa você está fechando a connexão duas vezes no metodo inserir do usuario

conf.execute(bd.toString());  
            con.close();  
            conf.close();

e no jsp

response.sendRedirect("Confirmando_Cadastro.jsp");  
            conn.fechar();

e se estiver utilizando uma versão do java posterior a 5 pode tirar o Class.forName()

try {  
            Class.forName("org.postgresql.Driver");  
            con = DriverManager.getConnection(bd, "postgres", "");  
        }
G

A conexao continua indo “null”
quando eu “depuro”

e não apareceu nenhuma mensagem com o JOptionPane.showMessageDialog(…

Já apaguei uma das “fechadas”

CharlesAlves

eu olhei novamente o log e encontrei o erro class not found

INFO: Erro: java.lang.ClassNotFoundException: org.postgresql.Driverorg.postgresql.Driver
AVISO: StandardWrapperValve[jsp]: PWC1406: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
at pac_user.Usero.inserir(User.java:89)

dá uma olhada se o driver do postgres está corretamente mapeado no classPath vê se ele está

se estiver utilizando o eclipse é só seguir a seguencia

project - properties - java build path

e na aba libraries ir expandindo os itens já existentes e verificar se consta ou não o driver do postgres, caso não clique em add jars e adicione.

CharlesAlves

agora notei mais uma coisa presta atenção nessa linha

INFO: Erro: java.lang.ClassNotFoundException: org.postgresql.Driverorg.postgresql.Driver

ele tah procurando a classe org.postgresql.Driverorg.postgresql.Driver
tenta tirar o Class.forName e vê se dá certo

G

Eu já tirei, continua chamando a conexao como null

e eu to usando o netbeans 7.0.1

ele tambem ta dando erra na linha 81 do validarcadastro.jsp.java

mais não tem nada nessa linha, antes aparece isso

User user = new User();
user.inserir(user, con);

mais nada na linha 81

CharlesAlves

Bom mas e o driver do postgres você já adiciono ao classpath?!

faz muito tempo que não trabalho com o netbeans mas as libries ficam listadas na biblioteca, veja se está lá caso não dá um clique com o botão direito, e adicionar jar e procura o local onde está o driver e adiciona.

Vinny

Vc consegue acessar o banco fora do java, usando alguma ferramente de administração de BD?

Pq é estranho criar um banco sem senha, alguns BD nem permite isso, nunca trabalhei com postgree, então não sei dizer se isso é permitido com ele, mas faz o teste tenta se conectar com o banco fora do java.

CharlesAlves

Gabi dei uma olhada de como fazer no netbeans, não sei se está correto mas vamos lá…

verifica na pasta bibliotecas se nela consta o drive do postgres, vai expandindo todos os itens que tiver lá e vê se algum é ele, caso não clica com o botão direito em bibliotecas e em adicionar jar e adiciona o .jar do driver do postgres

dá uma olhada nesse post

Vinny

Lendo um pouco sobre em um site que encontrei, diz que para se conectar com o postgree sem senha é necessário fazer alterações nos arquivos de configuração do postgree, no site fala como fazer essa alteração no ubuntu e tb PhpPgAdmin, possivelvente esse é o problema que esta acontecendo com vc.

Recomendo que vc crie um usuario e senha para vc acessar o banco e não usar esse padrão.

Link do site que consultei: http://blogetilico.wordpress.com/2007/01/26/login-sem-senha-no-postgresql/

G

Poxa gente, testei todas as dicas que me deram e ainda ta chamando null…
Tava sem o postgre… jar
acrescentei, desativei o firewall, coloquei senha no bd.

O pior é que quando minhas classes estavam errada, tava funcionando, agora que estão no padrao (pacote letra minuscula, em vez de classe cadastro classe User…) ele parou de cadastrar.

G

Estava olhando/testando e vi que quando chamo user.inserir (name,lastname …)

ele está passando os valores como null também.

Queria saber se alguém sabe porque, ou se imaginam (já que postei os cod aqui).

G

.

CharlesAlves

Gabi, faz um pacote com nome repositório e dentro dele cria uma classe com o nome UserDAO e dentro dela é que você coloca o método inserir. Eu sei porque todos os seus parâmetros estão dando como null agora que você falou ficou tudo claro.

public void inserir (User user,Connection con){  
        try {                
            Statement conf = con.createStatement();  
            //aqui em vez de acessar diretamente os tributos do user você deveria utilizar os métodos de acesso get
            //tipo user.getNome, por isto está dando errado.
            StringBuffer bd = new StringBuffer("INSERT INTO user (name, lastname, email, login, passw)"  
                    + "VALUES('" + user.name + "', '" + user.lastname+ "', '" + user.email + "', '"   
                    + user.login + "', '" + user.passw+ "');");  
            conf.execute(bd.toString());  
            con.close();  
            conf.close();  
        } catch (SQLException ex) {  
            System.out.println("ERROR!\n\nErro ao cadastrar dados!" + ex);  
        }  
    }

Bom esse é um dos erros pelo qual está dando o null point, outra coisa esse seu código que foi criada em um jsp deveria estar em um servlet, você está utilizando somente código java quando na verdade arquivos jsp são para trabalhar com html, tagblits e scriptles.

seria legal se você arrumasse um tempinho pra ler a apostila fj21 da caelum eu já a li e aprendi muito recomendo totalmente.

faz ai as alterações e passa o feedback.

Criado 11 de outubro de 2011
Ultima resposta 11 de out. de 2011
Respostas 17
Participantes 4