Fórum Erro ao inserir registro no banco de ados #399052

12/04/2011

0

Essa é minha classe:

import java.sql.*;

public class AgendaDB {
    private String nome = blank;
    private String endereco = blank;
    private String cidade = blank;
    private String telefone = blank;
    private String result_busca = blank;
    private String result_inserir = blank;
    public static final String BUSCA_INVALIDA = "failure";
    public static final String BUSCA_VALIDA = "success";
    public static final String SUCESSO_INSERCAO = "success";
    public static final String FALHA_INSERCAO = "failure";
    static Connection con = null;
    static Statement stm = null;
    static ResultSet rs;
    static private String blank = "";
    public AgendaDB() {
        if (con==null) {
            try {
                Class.forName("org.postgresql.Driver");
                con =
                    DriverManager.getConnection("jdbc:postgresql://localhost:5435/postgres","postgres","eguru");
            } catch (SQLException e) {
                System.err.println ("Erro: "+e);
                con = null;
            } catch (ClassNotFoundException e) {
                System.out.println("ClassNotFound...");
                e.printStackTrace();
            }
        }
    }
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public String getCidade() {
        return cidade;
    }
    public void setCidade(String cidade) {
        this.cidade = cidade;
    }
    public String getEndereco() {
        return endereco;
    }
    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }
    public String getTelefone() {
        return telefone;
    }
    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }
    public String inserir() {
        String result_inserir = FALHA_INSERCAO;
        try {
            stm = con.createStatement();
            stm.execute("INSERT INTO teste(nome,endereco,cidade,telefone) VALUES ('" + nome + "','"+
                    endereco + "','" + cidade + "','"+ telefone + "')");
            stm.close();
            result_inserir = SUCESSO_INSERCAO;
        } catch (SQLException e) {
            System.err.println ("Erro: "+e);
            result_inserir = FALHA_INSERCAO;
        }
        return result_inserir;
    }
    public String buscar() throws SQLException {
        String result_busca = BUSCA_INVALIDA;
        try {
            stm = con.createStatement();
            rs = stm.executeQuery("SELECT * FROM teste WHERE nome = '" + nome + "'");
            if (rs.next()) {
                nome = rs.getString(1);
                endereco = rs.getString(2);
                cidade = rs.getString(3);
                telefone = rs.getString(4);
                result_busca = BUSCA_VALIDA;
            }
            else
                result_busca = BUSCA_INVALIDA;
            rs.close();
            stm.close();
        } catch (SQLException e) {
            System.err.println ("Erro: "+e);
        }
        return result_busca;
    }
}
 
essa é minha JSP que chama os parametros de inserção

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<html>
<body>
<f:view>
<h:form>
<center><h2> Inserção </h2></center>
<br>
<h3>Entre com os dados abaixo</h3>
<table>
<tr>
<td>Nome:</td>
<td>
<h:inputText value="#{agenda.nome}"/>
</td>
</tr>
<tr>
<td>Endereço:</td>
<td>
<h:inputText value="#{agenda.endereco}"/>
</td>
</tr>
<tr>
<td>Cidade:</td>
<td>
<h:inputText value="#{agenda.cidade}"/>
</td>
</tr>
<tr>
<td>Telefone:</td>
<td>
<h:inputText value="#{agenda.telefone}"/>
</td>
</tr>
</table>
<p>
<h:commandButton value="Inserir" action="#{agenda.inserir}"/>
</p>
</h:form>
<br>
<h:outputLink value="index.jsf">
<f:verbatim>voltar</f:verbatim>
</h:outputLink>
</f:view>
</body>
</html>

e esse é o erro que dá, que eu não sei como resolver.

HTTP Status 500 - type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception javax.servlet.ServletException: java.lang.NullPointerException javax.faces.webapp.FacesServlet.service(FacesServlet.java:321) root cause javax.faces.el.EvaluationException: java.lang.NullPointerException javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98) com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98) javax.faces.component.UICommand.broadcast(UICommand.java:311) javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781) javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246) com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77) com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114) javax.faces.webapp.FacesServlet.service(FacesServlet.java:308) root cause java.lang.NullPointerException AgendaDB.inserir(AgendaDB.java:61) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) org.apache.el.parser.AstValue.invoke(AstValue.java:196) org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276) org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68) javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84) com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98) javax.faces.component.UICommand.broadcast(UICommand.java:311) javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781) javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246) com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77) com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114) javax.faces.webapp.FacesServlet.service(FacesServlet.java:308) note The full stack trace of the root cause is available in the JBoss Web/3.0.0-CR1 logs. JBoss Web/3.0.0-CR1
Pjava

Pjava

Responder

Posts

12/04/2011

Davi Costa

Está dando nullpointer na linha
AgendaDB.inserir(AgendaDB.java:61)

Vc já debugou para ver o que está chegando nulo, acho q aí que vc deve focar para resolver
 seu problema.

Att Davi
Responder

Gostei + 0

12/04/2011

Pjava

Como eu debugo no eclipse helios?Tenho uma JSP e uma classe, como postei aí. Eu não sei debugar e preciso aprender a usar essa ferramenta.
Responder

Gostei + 0

12/04/2011

Davi Costa

Cara é bem simples,
no canto esquerdo da classe vc aperta com o botão direito e marca a opção:
Show Line Numbers.
Após aparecerem os números vc dá um duplo clique em cima do número.
Vc vai levantar seu servidor em modo debug, assim que a Thread em execução passar sobre essa linha o eclipse vai te solicitar para vc abrir o modo debug vc aceita e vê o estados de todos os objetos.

Para maiores dicas tem bastante conteúdo na net:
http://www.google.com.br/search?q=debugar+no+eclipse&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:pt-BR:official&client=firefox-a

Att Davi
Responder

Gostei + 0

12/04/2011

Pjava

Até aí beleza. Acontece é que eu tenho uma JSP e é através dela que eu chamo o inserir em uma classe java. Quando coloco o break point e debugo, ao chegar nessa linha, levanta uma página conforme abaixo:
Este programa não pode exibir a página da Web     Causas prováveis: Você não está conectado à Internet. O site está encontrando problemas. Talvez haja um erro de digitação no endereço.   Você pode tentar:   Verifique sua conexão com a Internet. Tente visitar outro site para verificar se você está conectado.   Digite o endereço novamente.   Voltar para a página anterior.   Mais informações
Se não tiver em modo debug, aí vem o erro que já postei.
Responder

Gostei + 0

12/04/2011

Davi Costa

Vc n tem que se preocupar em debugar jsp não.
É uma classe java que executa a operações, não importa quem chamar ela, quando vc coloca o break-point em alguma linha dela, quando for executada essa linha é para entrar em modo debug.
Reveja os passos se foram feitos todos corretamente e se vc realmente subiu a aplicação em modo debug.
Não é para colocar brek-point em jsp não. Não há necessidade alguma.
Caso ainda esteja aprendendo com o modo debug e queira resolver logo o seu problema, vc pode pegar os objetos e seus respectivos atributos do método que inseri no banco e imprimi no console com System.out.println();
E vc vem quem está nulo.
Pelo método inserir quem pode estar nulo e dando nullpointer pode ser:

stm.

Mas para eu garantir precisaria que você me postasse qual é a linha 61.

Pesquise um pouco mais sobre debug no eclipse, vai te ajudar bastante.

Att Davi
Responder

Gostei + 0

12/04/2011

Dyego Carmo

Resolvido ?

Se sim favor fechar o seu post ;)

Valeu !


Responder

Gostei + 0

12/04/2011

Pjava

Essa é a tela do debug. Acho que tem a ver com as bibliotecas do jboss


Responder

Gostei + 0

12/04/2011

Robson Teixeira

Olá PJava      As bibliotecas do jboss não tem nada a ver com isso você tem que ver o que causa o nullPointer conforme o stackTrace postado  java.lang.NullPointerException
  AgendaDB.inserir(AgendaDB.java:61)
  sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)   talvez algum dos seus inputs não está enviando o conteudo digitado para os respetivos atributos pois creio que na hora de concatenar a String para envia ao postgres está com atributo nulo por isso nullPointer.   da uma olhada nisso ok??   att  robson Passarella
Responder

Gostei + 0

13/04/2011

Davi Costa

Como entrou nessa tela para debugar?
Se ainda está com dificuldades para debugar, pode partir para akela opção que te falei, pega seus atributos(objetos) e imprime no console, existe a possibilidade dos atributos da sua tela estarem vindo nulos sim, mas isso não produziria um NullPointerException não, eles só ficaram null. Por exemplo:
String s = "jjjkjjdjkldjkljklj"+null+"jjljlj"+null+"jkklj";
        System.out.println(s);

Esse trecho de código não daria nullPointerException, bom continuando o que daria problema:


public String inserir() {
        String result_inserir = FALHA_INSERCAO;
        try {
            stm = con.createStatement();
            stm.execute("INSERT INTO teste(nome,endereco,cidade,telefone) VALUES ('" + nome + "','"+
                    endereco + "','" + cidade + "','"+ telefone + "')");
            stm.close();
            result_inserir = SUCESSO_INSERCAO;
        } catch (SQLException e) {
            System.err.println ("Erro: "+e);
            result_inserir = FALHA_INSERCAO;
        }
        return result_inserir;
    }

Se con ou stm estiverem nulos, isso sim causaria problema. Então vamos resolver o problema por partes.
Vamos passar esse problema primeiro e depois veremos se  os campos da jsp estão nulos.
Na mensagem de erro fala da linha 61 da classe AgendaDB. Que linha seria essa?

Att Davi
Responder

Gostei + 0

13/04/2011

Pjava

A linha 61 é exatamente a linha do stm = con.createStatement(); Essa é a linha 61, logo tem tudo a ver com o que você está me falando. Tudo a ver mesmo. Isso pode estar relacionado com o driver do Postgresql? Eu falo isso, porque eu incluir o driver no meu projeto(ClassPath), porem não o vejo na pasta LIB da WEB-INF, somente na pasta Libraries e acho que isso pode estar dando esse erro. Pois outra vez que eu usava MySql aconteceu a mesma coisa até que consegui colocar na pasta LIB. O problema que não me lembro o que aconteceu. Eu tento um Ctrl+C e depois na pasta LIB Ctrl+V não dá, ele diz que não é possível fazer esse tipo de operação, colar do clipboard.
Responder

Gostei + 0

13/04/2011

Davi Costa

Tenta colar pela pasta fisicamente então. Acredito que não vá ter problema e depois vc dá um refresh no seu projeto, e remove a referência antiga das libraries do postgresql.

Att Davi
Responder

Gostei + 0

13/04/2011

Pjava

Vc diz abrir fora do Eclipse, é isso? Se for isso, farei. Fiz uma aplicação SE mesmo para tentar me conectar com o banco. E não consegui colocar o driver dele dentra da pasta correta e veja o que deu. Diz, conexão negada. Abaixo a minha pequena classe.   import java.sql.*; public class Connexao { public static void main(String[] args) { Connection con = null; Statement stm = null; ResultSet rs; if(con == null){ try{ Class.forName("org.postgresql.Driver"); con = DriverManager.getConnection("jdbc:postgresql://localhost:5435/postgres","postgres","eguru"); }catch (SQLException e) { System.err.println ("Erro: "+e); con = null; }catch (ClassNotFoundException e) { System.out.println("ClassNotFound..."); e.printStackTrace(); }//Fim do segundo catch }//Fim do primeiro catch }//fim do if }
Responder

Gostei + 0

13/04/2011

Davi Costa

Realmente sem o driver não vai ter como conseguir, mas cara vc que alterou a porta do seu postgres mesmo?
Ou vc só fez isso na classe Java?
Ainda tou encucado com isso.
Como vc mudou a porta do postgres?
Pq se está dando conexão negada, pode estar tendo problema na porta.
E nessa app SE vc adicionou de alguma forma o driver do postgres nas libs?

Att Davi 
Responder

Gostei + 0

13/04/2011

Pjava

Coloquei na mão, por fora e ficou uma marquinha preta semelhante ao tick. E no driver do postgresql, não apareceu aquele simbolo parecido com um pote com o|o. Isso não apareceu, apareceu tipo uma folha de papel mais um asterisco preto e aquele símbolo igual ao do WebAppLibrary e etc...
Responder

Gostei + 0

13/04/2011

Davi Costa

Mas ai testou?
Deu algum erro agora?

Att Davi
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar